从2d numpy数组中删除元素而不会丢失结构

时间:2014-10-12 13:54:49

标签: python-3.x numpy

我想从2d numpy数组中删除特定字符。例如:

myarr = np.array([[2,"?",5,2,3,6,8],[6,7,8,9,"?"]])

如何删除"?"没有失去阵列的结构?我的结果应该是这样的:

 [[2,5,2,3,6,8]
  [6,7,8,9]]

(我在Win7机器上使用Python 3.4.2和numpy 1.9)

2 个答案:

答案 0 :(得分:2)

Numpy数组必须是"矩形",也就是说,所有行/列必须具有相同的长度。你的例子看起来像是需要一个"锯齿状数组",numpy并不支持。

如果这只是一个选择不当的例子,你可以删除?通过选择所有非元素?元素:

result = myarr[myarr!='?']

答案 1 :(得分:2)

myarr = np.array([[2,"?",5,2,3,6,8],[6,7,8,9,"?"]])生成

array([[2, '?', 5, 2, 3, 6, 8], [6, 7, 8, 9, '?']], dtype=object)

这是一个包含object类型的2个项目的数组。没有'结构'。这基本上与列表列表

相同
mylist = [[2, '?', 5, 2, 3, 6, 8], [6, 7, 8, 9, '?']]

删除'?'的简单方法是:

for l in mylist:
    l.remove('?')

但如果没有'?',则会引发ValueError在子列表中,如果有多个,则不会删除所有子列表。这两个故障都可以通过编写一个计算出现次数的小函数来修复,并删除正确的数字。你能处理这个功能吗?

所以问题归结为从列表列表(或列表数组)中删除所选元素。


'全部删除'功能比我想象的更简单:

 def remove_all(a,x):
     while x in a:
         a.remove(x)
 for a in myarr:
     a.remove_all('?')