(注意:原始问题有点不同,其他答案适用;原始问题请参阅 revision history。)
当这些数组也可以是标量时,是否有统一的方法来索引 numpy 数组?
我正在尝试编写一个处理 float 、 float 列表或 0/1D numpy 数组的函数。为了统一处理这个问题,我使用了 numpy.asarray()
,它总体上运行良好(当输入是标准 Python float 时,我不介意返回 numpy.float64)。
当我需要处理条件操作和中间数组函数时会出现问题,例如:
value = np.asarray(5.5)
mask = value > 5
tmpvalue = np.asarray(np.cos(value))
tmpvalue[mask] = value
这会抛出一个异常:
Traceback (most recent call last):
File "testscalars.py", line 27, in <module>
tmpvalue[mask] = value
IndexError: 0-d arrays can't be indexed
有什么优雅的解决方案吗?
最佳答案
事实证明这个问题与 numpy 1.8 及之前的版本有关;升级到 numpy 1.9(.2) 可以解决这个问题。
Boolean indexing into scalar arrays will always return a new 1-d array. This means that array(1)[array(True)] gives array([1]) and not the original array.
这会方便地将 tmpvalue[mask]
临时转换为一维数组,允许将其分配给 value
:
tmpvalue[mask] = value
关于python - 对 0D 和 1D numpy 数组使用数组索引的统一方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996934/