簡體   English   中英

使用numpy將向量轉換為遮罩矩陣

[英]Convert a vector to a mask matrix using numpy

假設我們有以下向量:

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

目的是創建5 x 3矩陣M ,如下所示:

[[0 1 0]
 [0 0 1]
 [0 0 0]
 [0 0 0]
 [1 0 0]]

v相應索引的每一列中只有一個元素等於1。 例如,由於v[0]為4,則M[4, 0] == 1 ,由於v[2]為1,則M[1, 2] == 1

如何使用scipy和numpy在Python中建立這樣的矩陣? 在MATLAB中,您可以在一行中使用sparse函數和full函數來執行此操作。 我不希望使用for循環,因為我正在尋找對此的矢量化實現。

你可以做:

from scipy import sparse

inds = np.array([4, 0, 1])
values = np.ones_like(inds)       # [1, 1, 1]
index = np.arange(inds.shape[0])  # 3
m = sparse.csc_matrix((values, (inds, index)), shape=(5, 3))

輸出:

>>> m.todense()
matrix([[0, 1, 0],
        [0, 0, 1],
        [0, 0, 0],
        [0, 0, 0],
        [1, 0, 0]])

如果需要密集的數組輸出,則可以使用兩個整數數組來索引非零元素的行/列:

v = np.array([4, 0, 1])
x = np.zeros((5, 3), np.int)
x[v, np.arange(3)] = 1

print(x)
# [[0 1 0]
#  [0 0 1]
#  [0 0 0]
#  [0 0 0]
#  [1 0 0]]

暫無
暫無

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

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