我想从2d 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)
我想从2d 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)
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)
也就是说的2项object
类型的阵列。没有一个“结构”。这与列表清单基本相同
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('?')
numpy的阵列必须是“矩形”,即,所有的行/列必须有相同的长度。你的例子看起来像你需要一个“锯齿状数组”,numpy不支持。
如果这仅仅是一个糟糕的例子,你可以删除?通过选择所有非?元素:
result = myarr[myarr!='?']
如果numpy的是不支持这个,有什么在上面的例子做“myArr,该”表示,为什么我得到没有错误消息当使用np不支持的np.array()命令构造对象时? – roschu 2014-10-13 05:45:44
谢谢你指出这一点。我刚刚开始使用numpy,并没有意识到代码中的列表/数组混乱。 – roschu 2014-10-14 06:18:09