python - 对 0D 和 1D numpy 数组使用数组索引的统一方式

标签 python numpy

(注意:原始问题有点不同,其他答案适用;原始问题请参阅 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) 可以解决这个问题。

numpy 1.9 release notes有话要说:

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/

相关文章:

python - 如何将二维 NumPy 数组的相应值映射到一维数组

python - 如何使用Python计算for循环中的表达式?

python - 为具有指定列的每一行分配值到一个 numpy 数组

python - 在 true_divide 中遇到无效值

python - 我如何查看 ponyorm 生成的 SQL?

numpy:在二维数组的每一行中找到值的第一个索引

python - 如何使用 numpy 保存和读回多维字符串数组(可能)?

python - Numpy 相当于 if/elif/else,如果不满足条件则保留最后一个值

python - 如何从文本文件中的 jpeg 图像文件列表中打开图像 - 变量形成

python - 编程自动循环