2016-06-22 55 views
2

當在numpy數組上重複操作時發現問題時,我找到了這個答案:Increment Numpy multi-d array with repeated indices。我現在的問題是,爲什麼會看到這種行爲。重複numpy操作的預期行爲

import numpy as np 
t = np.eye(4) 

t[[0,0,1],[0,0,1]] 

導致

array([1.,1.,1.]) 

所以不宜

t[[0,0,1],[0,0,1]]+=1 

導致

[[3,0,0,0], 
[0,2,0,0], 
[0,0,1,0], 
[0,0,0,1]] 

+1

存在緩衝問題。 'np.add.at'旨在解決這個問題。 – hpaulj

+1

http://docs.scipy.org/doc/numpy/reference/generated/numpy.ufunc.at.html – hpaulj

回答

1

查看documentation索引數組以及基本索引和高級索引之間的區別。

t[[0,0,1],[0,0,1]]下降的高級索引類別下和在文檔中指出:

高級索引總是返回的數據(與返回一個視圖基本切片對比度)的副本。

該副本第一個增量前評估,進而預計,

import numpy as np 
t = np.eye(4) 
t[[0,0,1],[0,0,1]] += 1 
print(t) 

打印:

[[ 2. 0. 0. 0.] 
[ 0. 2. 0. 0.] 
[ 0. 0. 1. 0.] 
[ 0. 0. 0. 1.]] 

按照評論上方,使用numpy.ufunc.atnumpy.add.at來解決這個問題。