2017-07-28 28 views
0

我有整數從範圍[0,3]的載體,例如:蟒numpy的陣列元件的同時改變

v = [0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1]

我知道我可以使用替換以下

v[v == 0] = 5 

,其改變的0所有appearences在向量v爲值5通過其他值向量中的元素的特定值。 但我想做些事情有點不同 - 我想改變的0所有值(讓他們target values調用)1,並從00所有的值不同,所以我希望得到如下:

v = [1,1,0,0,0,0,1,0,1,0,0,0,1,0,1,0,0,0]

然而,我不能調用替換代碼(我上面使用)如下:

v[v==0] = 1 
v[v!=0] = 0 

因爲這顯然利茲到零向量。 是否有可能以parralel方式進行上述替換,以獲得所需的矢量? (我想擁有一種通用技術,即使我將改變目標價值,也能讓我使用它)。任何建議都會非常有幫助!

回答

1

可以檢查v等於零,然後將轉換的布爾陣列爲int,所以如果原始值是零,則布爾值爲true,並將其轉換爲1,否則爲0:

v = np.array([0,0,1,2,1,3, 0,3,0,2,1,1,0,2,0,3,2,1]) 
(v == 0).astype(int) 
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0]) 

或使用numpy.where

np.where(v == 0, 1, 0) 
# array([1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0])