在没有循环的numpy数组中为所有奇数或偶数索引元素添加一个数字

时间:2012-08-07 15:59:57

标签: python arrays numpy

让我们说你的numpy数组是:

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

您可以这样做:

  

A + .1

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

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

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

4 个答案:

答案 0 :(得分:20)

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.])

答案 1 :(得分:7)

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

答案 2 :(得分: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]

答案 3 :(得分:0)

如果列表没有从两个1开始并且您想要添加到所有偶数,您可以使用:

A[1::2] += 0.1

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

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