2014-02-25 26 views
0

我有一个多维数组,例如;如果该列中的所有元素满足条件,则删除多维数组中的列

a = [[1,1,5,12,0,4,0], 
    [0,1,2,11,0,4,2], 
    [0,4,3,17,0,4,9], 
    [1,3,5,74,0,8,16]] 

如何删除该列,如果该列中的所有条目都等于零?在阵列中,这将意味着删除导致第4列:

a = [[1,1,5,12,4,0], 
    [0,1,2,11,4,2], 
    [0,4,3,17,4,9], 
    [1,3,5,74,8,16]] 

N.b我已经写了一个嵌套列表,但只有讲清楚。我也不知道零列将在数组中的位置。

我尝试到目前为止只发现其中的所有元素都等于零列的索引:

a = np.array([[1,1,5,12,0,4,0],[0,1,2,11,0,4,2],[0,4,3,17,0,4,9],[1,3,5,74,0,8,16]]) 
b = np.vstack(a) 
ind = [] 
for n,m in zip(b.T,range(len(b.T))): 
    if sum(n) == 0: 
     ind.append(m) 

有什么办法来实现这一目标?

回答

0

你已有的代码,你可以这样做:

for place in ind: 
    for sublist in a: 
     del sublist[place] 

哪干得不错,但都不是很理想......


编辑:numpy的强

import numpy as np 
a = np.array(a) 
a = a[:, np.sum(a, axis=0)!=0] 
+0

我同意,似乎有点繁琐 - 你知道更pythonic的方式? – Holtz

相关问题