gpt4 book ai didi

python - 2D Numpy 数组花式索引 + 掩码

转载 作者:行者123 更新时间:2023-12-02 03:58:35 26 4
gpt4 key购买 nike

我有:

import numpy as np
a = np.array([[ 4, 99, 2],
[ 3, 4, 99],
[ 1, 8, 7],
[ 8, 6, 8]])

为什么

a[[True, True, False, False], [1,2]]

等于

array([99, 99])

不是

array([99, 2],
[4, 99])

因为我使用 bool 掩码选择前两行,使用花式索引选择第二列和第三列?特别是自从打电话以来

a[[True, True, False, False],:][:, [1,2]]

给了我预期的结果。我猜测这是某种广播规则,但对我来说并不明显。谢谢!

最佳答案

bool 数组或列表的计算方式就像 where 已将其转换为索引数组:

In [285]: a[[True,True,False,False],[1,2]]
Out[285]: array([99, 99])

In [286]: a[np.where([True,True,False,False]),[1,2]]
Out[286]: array([[99, 99]])

In [287]: np.where([True,True,False,False])
Out[287]: (array([0, 1], dtype=int32),)

In [288]: a[[0,1], [1,2]]
Out[288]: array([99, 99])

因此,这是选择 a[0,1]a[1,2],“成对”选择。

该 block 使用数组(或等效列表)进行索引,这些数组相互广播以生成 (2,2) 数组:

In [289]: a[np.ix_([0,1], [1,2])]
Out[289]:
array([[99, 2],
[ 4, 99]])
In [290]: a[[[0],[1]], [1,2]]
Out[290]:
array([[99, 2],
[ 4, 99]])

这种情况相当于 2 阶段索引:a[[0,1],:][:,[1,2]]

我正在使用 np 版本 12。在最近的版本中, bool 索引发生了一些变化。例如,如果 bool 值的长度不正确,它会运行,但会发出警告(这部分是新的)。

In [349]: a[[True,True,False],[1,2]]
/usr/local/bin/ipython3:1: VisibleDeprecationWarning: boolean index did not match indexed array along dimension 0; dimension is 4 but corresponding boolean dimension is 3
#!/usr/bin/python3
Out[349]: array([99, 99])

v 13 的更改描述如下:

https://docs.scipy.org/doc/numpy-dev/release.html#boolean-indexing-changes

关于python - 2D Numpy 数组花式索引 + 掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42860958/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com