2012-08-07 24 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]

相關問題