簡體   English   中英

如何在沒有循環的情況下在特定位置修改2D numpy數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM