【发布时间】:2014-10-12 13:54:49
【问题描述】:
我想从 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)
【问题讨论】:
标签: 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)
【问题讨论】:
标签: python-3.x numpy
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('?')
【讨论】:
Numpy 数组必须是“矩形”,即所有行/列必须具有相同的长度。您的示例看起来需要一个“锯齿状数组”,而 numpy 不支持。
如果这只是一个选择不当的例子,您可以删除 ?通过选择所有非?元素:
result = myarr[myarr!='?']
【讨论】: