Поскольку вы изменяете строку X
, вы можете пропустить индексирование и использовать zip
для итерации строк:
In [833]: X=np.ones((2,3)); p=np.arange(6).reshape(2,3)
In [834]: for x,y in zip(X,p):
...: x[:] = x + y
...:
In [835]: X
Out[835]:
array([[1., 2., 3.],
[4., 5., 6.]])
Если вам все еще нужен индекс, вы можете добавить перечисление:
for i,(x,y) in enumerate(zip(X,p)):...
Нет большой разницы в эффективности в этих альтернативах. Вы все еще должны вызывать свою функцию m
раз. Вы все еще должны выбрать строки, либо по индексу, либо по итерации. Оба массива немного медленнее, чем в эквивалентном списке.
Лучше всего написать свою функцию, чтобы она работала напрямую с 2d-массивами и не нуждалась в итерации.
X+p
Но если функция слишком сложна для этого, тогда ее время оценки, вероятно, будет относительно большим (по сравнению с механизмом итерации).