簡體   English   中英

NumPy數組索引2D矩陣

[英]NumPy array indexing a 2D matrix

在處理相同的大數據時,我遇到了一個小問題。 但是現在,讓我們假設我有一個用零填充的NumPy數組

>>> x = np.zeros((3,3))
>>> x
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])

現在,我想用特定值更改其中一些零。 我已經給出了要更改的單元格的索引。

>>> y = np.array([[0,0],[1,1],[2,2]])
>>> y 
array([[0, 0],
       [1, 1],
       [2, 2]])

我有一個具有所需(現在是隨機的)數字的數組,如下

>>> z = np.array(np.random.rand(3))
>>> z
array([ 0.04988558,  0.87512891,  0.4288157 ])

所以現在我想我可以做到以下幾點:

>>> x[y] = z

但是比起這樣填充整個數組

>>> x
array([[ 0.04988558,  0.87512891,  0.4288157 ],
       [ 0.04988558,  0.87512891,  0.4288157 ],
       [ 0.04988558,  0.87512891,  0.4288157 ]])

但是我希望得到

>>> x
array([[ 0.04988558,           0,          0 ],
       [          0,  0.87512891,          0 ],
       [          0,           0,  0.4288157 ]])

編輯

現在,我使用了對角線索引,但是在這種情況下,我的索引不僅僅是對角線。 我希望以下作品:

>>> y = np.array([[0,1],[1,2],[2,0]])
>>> x[y] = z
>>> x
>>> x
array([[          0,  0.04988558,          0 ],
       [          0,           0, 0.87512891 ],
          0.4288157,           0,          0 ]])

但這就像上面那樣填充整個數組

數組索引在多維數組上的工作方式略有不同

如果有矢量,則可以使用來訪問前三個元素

x[np.array([0,1,2])]

但是在矩陣上使用它時,它將返回前幾行。 一見鍾情,使用

x[np.array([0,0],[1,1],[2,2]])]

聽起來很合理。 但是,NumPy數組索引的工作方式不同:它仍然以一維方式處理所有這些索引,但是以與索引向量相同的形狀從向量返回值。

要正確訪問2D矩陣,您必須將兩個分量都分成兩個單獨的數組:

x[np.array([0,1,2]), np.array([0,1,2])]

這將獲取矩陣主對角線上的所有元素。 也可以使用此方法進行分配:

x[np.array([0,1,2]), np.array([0,1,2])] = 1

因此,要訪問您在編輯中提到的元素,必須執行以下操作:

x[np.array([0,1,2]), np.array([1,2,0])]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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