14

假设您的 numpy 数组是:

 A =    [1,1,2,3,4]

你可以简单地做:

A + .1

向每个元素 numpy 数组添加一个数字

我正在寻找一种将数字添加到奇数或偶数索引数字A[::2] +1同时保持整个数组完整的方法。

是否可以在没有任何循环的情况下向所有奇数或偶数索引元素添加一个数字?

4

4 回答 4

25
In [43]: A = np.array([1,1,2,3,4], dtype = 'float')

In [44]: A[::2]  += 0.1

In [45]: A
Out[45]: array([ 1.1,  1. ,  2.1,  3. ,  4.1])

请注意,这会修改A. 如果您希望保持A不变,请先复制A

In [46]: A = np.array([1,1,2,3,4], dtype = 'float')

In [47]: B = A.copy()

In [48]: B[::2]  += 0.1

In [49]: B
Out[49]: array([ 1.1,  1. ,  2.1,  3. ,  4.1])

In [50]: A
Out[50]: array([ 1.,  1.,  2.,  3.,  4.])
于 2012-08-07T16:03:35.043 回答
15

除了以前的答案,要修改具有奇数索引的数字,您应该使用 A[1::2] 而不是 A[::2]

于 2012-08-07T16:18:39.927 回答
2

具有列表理解的东西可以工作。

A = [1,1,2,3,4]
A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]

使用三元组快速而肮脏。可能不适用于您的 Python 版本,不记得它适用于哪个版本。


在 Python 2.7.3 和 Python 3.2.3 中检查,输出是一样的:

>>> A = [1,1,2,3,4]

>>> A
[1, 1, 2, 3, 4]

>>> A = [A[i] + (0 if (i%2 == 0) else .1) for i in range(len(A))]

>>> A
[1, 1.1, 2, 3.1, 4]
于 2012-08-07T16:11:41.343 回答
0

如果列表不是以两个 1 开头并且您想添加到所有偶数,您可以使用:

A[1::2] += 0.1

或者

A[::-2][::-1] += 0.1

在后一种情况下,[::-1] 用于将数组反转回正常顺序。

于 2018-04-30T23:09:16.043 回答