【发布时间】:2015-04-03 07:45:01
【问题描述】:
我有 numpy 数组 heights,其中可能包含 nan。我通过这样做来清理它:
heights = numpy.asarray([ h for h in heights if not numpy.isnan(h) ])
这似乎是表达这种简单/常见事物的一种相当冗长的方式。我经常必须这样做,以便以其他方式过滤我的数组,并且不得不依靠数组构建,这很有效,但我敢打赌有更好的方法来做到这一点。例如。按范围过滤...
heights = numpy.asarray(heights[lowerBound <= heights & heights < upperBound])
在 python 中失败 ,heights 仍然是一个 numpy 数组。我回去做...
编辑:此行的错误消息是:
TypeError: 输入类型不支持 ufunc 'bitwise_and',并且根据强制转换规则 ''safe'' 无法安全地将输入强制转换为任何支持的类型
/编辑
heights = numpy.asarray(heights[[h for h in heights if lowerBound <= h and h < upperBound]])
毛。我已经使用 python 2-3 个月了,但我仍然没有真正了解如何有效和简单地使用 numpy 屏蔽系统。我来自大量使用 matlab,其中“掩码”将是一组相同形状/大小的布尔值。例如
heights = heights(~isnan(heights));
或者……
heights(isnan(heights)) = [];
这两个看起来都超级干净。此外,在 python 中失败的 bounds 示例在 matlab 中有效,尽管括号必须更改为括号......
heights = heights(lowerBound <= heights & heights < upperBound)
如何在 python/numpy、pythonic 或其他语言中优雅地编写这些简单的数据转换?
【问题讨论】:
标签: python arrays matlab python-2.7 numpy