![](/img/trans.png)
[英]Modify the elements of a Numpy 2D- array at specific locations without for loop
[英]how to modify a 2D numpy array at specific locations without a loop?
我有一個2D numpy數組,我有一個行和列的數組,應該設置為一個特定的值。 讓我們考慮以下示例
a = array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
我想修改行[0,2]和列[1,2]的條目。 這應該導致以下數組
a = array([[1, 2, 0],
[4, 5, 0],
[7, 8, 9]])
我做了以下操作,結果修改了每一行中的每個列序列
rows = [0,1]
cols = [2,2]
b=a[numpy.ix_(rows,columns)]
它導致以下數組修改指定數組的每一列
array([[1, 0, 0],
[4, 5, 6],
[7, 0, 0]])
有人可以讓我知道怎么做嗎?
非常感謝
編輯:需要注意的是,行和列恰好發生在順序上。 實際的一點是,這些可以是任意的,也可以是任何順序。 如果是rows = [a,b,c]和cols = [nxz],那么我想在位置(a,n),(b,x),(c,z)處准確修改三個元素。
添加其他人所說的內容,您可以使用花式索引修改這些元素,如下所示:
In [39]: rows = [0,1]
In [40]: cols = [2,2]
In [41]: a = np.arange(1,10).reshape((3,3))
In [42]: a[rows,cols] = 0
In [43]: a
Out[43]:
array([[1, 2, 0],
[4, 5, 0],
[7, 8, 9]])
您可能希望閱讀有關索引多維數組的文檔: http : //docs.scipy.org/doc/numpy/user/basics.indexing.html#indexing-multi-dimensional-arrays
關鍵點是:
如果索引數組具有匹配的形狀,並且索引數組的每個維度都有一個索引數組,則結果數組具有與索引數組相同的形狀,並且值對應於索引中每個位置的索引集陣列。
重要的是,這也允許您執行以下操作:
In [60]: a[rows,cols] = np.array([33,77])
In [61]: a
Out[61]:
array([[ 1, 2, 33],
[ 4, 5, 77],
[ 7, 8, 9]])
您可以使用另一個相同大小的數組,列表或元組獨立設置每個元素。
一個解決方法: ndarray.flatten, np.put(), ndarray.reshape
嘗試ndarray.flatten(array)
,這樣你就可以處理一個可以用numpy.put(array,[indices],[values])
操作的dim數組。 然后使用ndarray.reshape()
來獲取原始尺寸。
首先,您對“正確”數組的描述與您指定的列和行不匹配...
要獲得“正確”的數組,您可以這樣做:
a[:2, 2] = 0
要修改第一行和第三行的第二列和第三列(行[0,2]和列[1,2]),你要做你正在做的事情......(你修改行的描述[0, 2]和列[1,2]正是你得到的結果,對吧?)
它應該像[0,2] = 0和[1,2] = 0一樣簡單。 你也可以做[0:2,2] = 0。 python中基於':'的范圍索引是半開區間[0,2],其實際范圍從0到1(不包括2的結束點)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.