2012-08-07 96 views
8

比方说你的numpy的数组是:添加了一些在numpy的阵列中所有奇数或偶数索引的元素没有循环

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

你可以简单地做:

A + 0.1

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

我正在寻找一种方法来添加一个数字到只有奇数或偶数索引号码A[::2] +1,同时保持整个阵列完好无损。

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

+0

为什么它需要没有循环?你能显示你的代码吗?你想在代码中实现这一点? – 2012-08-07 16:01:48

+1

“保持整个阵列完好无损”是什么意思?你是否排除了就地操作? – DSM 2012-08-07 16:02:52

回答

16
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.]) 
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] 
+0

啊,错过了numpy阵列。第一个答案好多了。我的错。 – DrGodCarl 2012-08-07 16:15:31

5

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

相关问题