我有一個numpy數組y [1,2,3,4,5,6,1,2,3,4,5,6]按值掩蓋數組然後掩碼相應的矩陣
然後我有一個矩陣X是一個numpy csr格式。
1)我需要在y中掩蓋元素6。然後,我需要屏蔽X中的對應行。
所以,y.shape是12.應該是10.X是12,20。應該是10,20。
如何做到這一點的numpy的
我有一個numpy數組y [1,2,3,4,5,6,1,2,3,4,5,6]按值掩蓋數組然後掩碼相應的矩陣
然後我有一個矩陣X是一個numpy csr格式。
1)我需要在y中掩蓋元素6。然後,我需要屏蔽X中的對應行。
所以,y.shape是12.應該是10.X是12,20。應該是10,20。
如何做到這一點的numpy的
我不是100%肯定我明白你的問題,但也許這將是有益的:
>>> import numpy as np
>>> a = np.array(range(1,7)*2) #Your array.
>>> a
array([1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6])
>>> b = np.array(list(a)*20).reshape(12,20) #just some matrix of right size and shape. np.empty(12,20) would probably work just as well.
>>> b
array([[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]])
>>> mask = a != 6 #mask. True for all points except ones where value == 6.
>>> b[mask,:] #take points along first axis where mask==True, all points along second axis.
array([[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4],
[5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6],
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2],
[3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4]])
使用nonzero。
(假設X已被定義)
import numpy as np
y = np.array([1,2,3,4,5,6,1,2,3,4,5,6])
keepers = np.nonzero(y != 6)
y = y[keepers]
x = x[keepers, :]
如果你的「屏蔽」輸出y
應該比你的輸入更小的,你沒有真正使用口罩。
正如你previous question建議,你真的可以很容易地找到它y
爲6
condition = (y != 6)
不同這是abool數組,你可以使用不6
檢索的y
值指數
y = y[condition]
您可以使用相同的condition
來獲得X
的相應行,但它是CSR,因此不支持花哨索引格式ING。你仍然可以將它轉換成LIL然後返回。
你也可以得到指數這y !=6
與
(indices,) = np.nonzero(y != 6)
這是一個普通的整數數組,您可以使用索引你X
。
我不喜歡回答我自己的問題,但得到妥善解決是本作處理一個CSR矩陣:
X = X[np.where(y != 6)[0]]
y = y[y != 6]
我錯過了,你說你的矩陣是CSR。不知道這是否有效,但給它一個鏡頭,我想... – acjay
是啊..不適合csr。 – Tampa