Атрибут operands
Атрибут operands класса nditer возвращает
кортеж массивов NumPy, которые были переданы итератору
при его создании. Этот атрибут позволяет получить прямой
доступ к операндам внутри цикла итерации, что особенно
полезно при работе с несколькими массивами одновременно
или при необходимости обратиться к исходным данным после
начала итерации.
Синтаксис
nditer.operands
Атрибут доступен только для чтения и возвращает кортеж
массивов в том порядке, в котором они были переданы
в конструктор nditer. Если итератор был создан
с одним массивом, возвращается кортеж из одного элемента.
Пример
Давайте создадим итератор для одного массива и получим доступ к операнду:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
it = np.nditer(arr)
operands = it.operands
print(operands)
print(type(operands))
Результат выполнения кода:
(array([1, 2, 3, 4, 5]),)
<class 'tuple'>
Пример
Используем атрибут operands для доступа к
нескольким массивам внутри цикла итерации:
import numpy as np
arr1 = np.array([1, 2, 3, 4])
arr2 = np.array([10, 20, 30, 40])
it = np.nditer([arr1, arr2])
for x, y in it:
print(f"{x} + {y} = {x + y}")
operands = it.operands
print("Original arrays:", operands)
Результат выполнения кода:
1 + 10 = 11
2 + 20 = 22
3 + 30 = 33
4 + 40 = 44
Original arrays: (array([1, 2, 3, 4]), array([10, 20, 30, 40]))
Пример
Атрибут operands возвращает ссылки на исходные
массивы, поэтому изменения, сделанные через операнды,
отражаются на оригинальных данных:
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
it = np.nditer(arr, op_flags=['readwrite'])
for x in it:
x[...] = x * 2
print("Modified array:", arr)
print("Operand from it:", it.operands[0])
Результат выполнения кода:
Modified array: [2 4 6 8 10]
Operand from it: [2 4 6 8 10]
Пример
Используем атрибут operands для проверки
типов и размерностей массивов внутри итератора:
import numpy as np
arr2d = np.array([[1, 2, 3], [4, 5, 6]])
arr1d = np.array([10, 20, 30])
it = np.nditer([arr2d, arr1d])
operands = it.operands
for i, arr in enumerate(operands):
print(f"Array {i}: shape={arr.shape}, dtype={arr.dtype}")
Результат выполнения кода:
Array 0: shape=(2, 3), dtype=int64
Array 1: shape=(3,), dtype=int64