看來我在這裏錯過了一些非常基本的東西。 我有一個大型的方陣,其中大部分爲零。我想要的是將其縮減爲包含具有非零條目的所有行和列的矩陣。 例如:減少numpy中的稀疏矩陣
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
應減少到:
1 1 1
1 1 1
1 1 1
有一個快速的方法來做到這一點?
看來我在這裏錯過了一些非常基本的東西。 我有一個大型的方陣,其中大部分爲零。我想要的是將其縮減爲包含具有非零條目的所有行和列的矩陣。 例如:減少numpy中的稀疏矩陣
1 1 0 1
1 1 0 1
0 0 0 0
1 1 0 1
應減少到:
1 1 1
1 1 1
1 1 1
有一個快速的方法來做到這一點?
怎麼是這樣的:
>>> arr
array([[ 1., 1., 0., 1.],
[ 1., 1., 0., 1.],
[ 0., 0., 0., 0.],
[ 1., 1., 0., 1.]])
>>> mask = (arr==0)
arr = arr[~np.all(mask,axis=0)]
arr = arr[:,~np.all(mask,axis=1)]
>>> arr
array([[ 1., 1., 1.],
[ 1., 1., 1.],
[ 1., 1., 1.]])
這正是我需要的。兩個問題雖然。首先,爲什麼'mask =(arr!= 0)'沒有工作(使用'np.all'和'〜np.all')。其次,什麼是神祕的「〜」? – Manbroski
@Manbroski'〜'是位運算符NOT操作符的快捷方式,參見[這裏](http://docs.scipy.org/doc/numpy/reference/generated/numpy.invert.html)。我會玩'np.all'和不同的面具,看看我爲什麼寫這個手術的原因,我不確定我能否簡單地將其寫入文字。 – Daniel
谷歌特殊字符有點困難,這就是爲什麼我使用它的語義困惑。非常感謝。 – Manbroski
什麼行/列有一些非零和一些零項?保留它們? – nneonneo
是的,如果有非零元素,應該保留。我正在考慮按順序切割不同的軸。第一行全零,然後列全零。 – Manbroski