使用NumPy迭代和修改数组

时间:2015-04-26 16:04:02

标签: python numpy vector

我有两个向量xy,其长度与NumPy相同。

如何迭代x并修改y中的值?

我的意思是

ingredients = empty(cakes.shape)
for ingredient, cake in np.nditer([ingredients,cakes]):
    ingredient = cake * 2 + 2

4 个答案:

答案 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的全部功能。