2017-06-15 8 views
1

例えば、私は、寸法X 3 3列に指定された要素がある場合、numpy配列から列を削除する方法はありますか? (パイソン)は、

[1 2 7 

    4 5 6 

    7 8 9] 

た2Dアレイを有し、I 7を含むすべての列を削除する - 第1及び第の3×1の行列を出力します。

[2 

    5 

    8] 

これをPythonでどうやってやりますか?私はそれをn x n次元の大きな行列に適用したいと考えています。

ありがとうございました!

答えて

1

numpyこれを行うのに役立ちます!

import numpy as np 
a = np.array([1, 2, 7, 4, 5, 6, 7, 8, 9]).reshape((3, 3)) 
b = np.array([col for col in a.T if 7 not in col]).T 
print(b) 
3
#Creating array 
x = np.array([[1, 2, 7],[4,5, 6],[7,8,9]]) 

x 
Out[]: 
array([[1, 2, 7], 
     [4, 5, 6], 
     [7, 8, 9]]) 

#Deletion 
a = np.delete(x,np.where(x ==7),axis=1) 

a 
Out[]: 
array([[2], 
     [5], 
     [8]]) 
+1

ああ、 'WHERE'ととバージョンを探していました'軸' ...いいね! –

0

あなたは列のインデックスのためのargwhereを使用して、削除することができます。あなたが実際に元の行列の部分を削除したくない場合は

import numpy 
a = numpy.array([[5, 2, 4],[1, 7, 3],[1, 2, 7]]) 
index = numpy.argwhere(a==7) 
y = numpy.delete(a, index, axis=1) 
print(y) 
1

、あなただけのブール値のインデックスを使用することができます

a 
Out[]: 
array([[1, 2, 7], 
     [4, 5, 6], 
     [7, 8, 9]]) 

a[:, ~np.any(a == 7, axis = 1)] 

Out[]: 
array([[2], 
     [5], 
     [8]]) 
0
A = np.array([[1,2,7],[4,5,6],[7,8,9]]) 
for i in range(0,3): 
... B=A[:,i] 
... if(7 in B): 
... A=np.delete(A,i,1) 
関連する問題