如果该列中的所有元素都满足条件,则删除多维数组中的列

时间:2014-02-25 23:33:41

标签: python arrays multidimensional-array

我有一个多维数组,如;

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]]

如果该列中的所有条目都等于零,我该如何删除该列?在数组a中意味着删除第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)

有没有办法实现这个目标?

1 个答案:

答案 0 :(得分: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]