python - 这种 numpy 选择行为背后发生了什么?

标签 python numpy array-broadcasting

回答这个 question ,其他一些人和我实际上是错误的,认为以下方法可行:

说一个有

test = [ [ [0], 1 ],
         [ [1], 1 ]
       ]
import numpy as np
nptest = np.array(test)

背后的原因是什么

>>> nptest[:,0]==[1]
array([False, False], dtype=bool)

虽然有

>>> nptest[0,0]==[1],nptest[1,0]==[1]
(False, True)


>>> nptest==[1]
array([[False,  True],
       [False,  True]], dtype=bool)

>>> nptest==1
array([[False,  True],
       [False,  True]], dtype=bool)

是否是维度方面的退化导致的。

最佳答案

nptest 是一个 object dtype 的二维数组,每行的第一个元素是一个列表。

nptest[:, 0] 是对象数据类型的一维数组,每个元素都是列表。

当您执行 nptest[:,0]==[1] 时,NumPy 不会对 nptest[:,0] 的每个元素执行逐元素比较列表 [1]。它从 [1] 创建一个尽可能高的数组,生成一维数组 np.array([1]),然后是 broadcasts比较,将 nptest[:,0] 的每个元素与整数 1 进行比较。

由于nptest[:, 0]中没有列表等于1,所以结果的所有元素都是False。

关于python - 这种 numpy 选择行为背后发生了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45426587/

相关文章:

python - 如何有效比较二维矩阵中的每一对行?

python - 有选择地设置 numpy 数组中的值(或根据条件设置)

python - "gcc"和 "libxml2"出错时如何安装lxml

python - Neo4j 无法连接到图形数据库服务器

python - 在 Python 中查找数组中某个值出现的索引值

python - 将 matlab 循环转换为 python 循环

numpy - 如何在 PyTorch 中选择二维索引?

python - 使用 pip 安装 scipy 时出错

python - Django - 如何显示下拉值而不是对象?

python - 乘积向量化