我有两个向量x
和y
,其长度与NumPy相同。
如何迭代x
并修改y
中的值?
我的意思是
ingredients = empty(cakes.shape)
for ingredient, cake in np.nditer([ingredients,cakes]):
ingredient = cake * 2 + 2
答案 0 :(得分:3)
正如其他人所说,使用矢量化通常更好/更快/更好/ ... /
但如果你有充分的理由使用迭代,你当然可以这样做。
我刚从the official documentation复制了这个:
>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> for x in np.nditer(a, op_flags=['readwrite']):
... x[...] = 2 * x
...
>>> a
array([[ 0, 2, 4],
[ 6, 8, 10]])
答案 1 :(得分:2)
您可能想要处理向量而不是循环吗?
In [144]: cakes = np.array([2, 3])
In [145]: cakes * 2 + 2
Out[145]: array([6, 8])
答案 2 :(得分:0)
您的示例不起作用,因为成分不是可变数据类型,它是int或float以及更大结构中的元素 - 您必须修改更大的结构。
尽管如此,这样做的numpyonic方式如下:
ingredient = cakes * 2 + 2
numpy的巨大优势在于它的矢量化语句,就像这个。
答案 3 :(得分:0)
使用矢量化:
ingredient = cakes * 2 + 2
这比放入python for循环要快得多,而且这样做的能力是numpy提供的主要功能之一。 Vectorization允许numpy利用cpu缓存,并使用C中实现的循环。你会习惯于在这样的操作方面进行思考,以获得numpy的全部功能。