我想从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)
答案 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('?')