gpt4 book ai didi

python - 为什么二维 NumPy 数组的 boolean 索引会产生一维数组?

转载 作者:行者123 更新时间:2023-12-02 01:06:58 24 4
gpt4 key购买 nike

我在 NumPy 中尝试使用 boolean 索引并遇到了这个让我感到困惑的问题:

import numpy as np

np.random.seed(0)

创建了一个 7 x 4 数组:
data = np.random.rand(7, 4) 

[[ 0.5488 0.7152 0.6028 0.5449]

[ 0.4237 0.6459 0.4376 0.8918]

[ 0.9637 0.3834 0.7917 0.5289]

[ 0.568 0.9256 0.071 0.0871]

[ 0.0202 0.8326 0.7782 0.87 ]

[ 0.9786 0.7992 0.4615 0.7805]

[ 0.1183 0.6399 0.1434 0.9447]]

也创建了一个 7 x 4 的 boolean 数组:
bool_array = 

([[True,False,False,True],
[True,False,False,True],
[True,False,False,True],
[True,False,False,True],
[True,False,False,True],
[True,False,False,True],
[True,False,False,True]])


bool_array = np.array(bool_array)

data[bool_array]

输出:
[ 0.5488  0.5449  0.4237  0.8918  0.9637  0.5289  0.568   0.0871  0.0202
0.87 0.9786 0.7805 0.1183 0.9447]

这怎么解释?我的推理如下:行数相同(即 7)。对于每一行, True位于位置 0 和 3(即 2 个值)。因此我最终得到一个 1 x 14 的矩阵。不过,我期待一个 7 x 2 矩阵。

有人可以澄清如何评估它以给出 1 x 14 矩阵吗?

最佳答案

Numpy 没有先验方式知道 True 在哪里你面具的元素将是。您的选择在列中如此整齐地对齐纯粹是偶然的。

要理解为什么结果会被分解为一维数组,请想象一下如何处理每行中有两个选择但并不总是来自同一列的情况。现在想象这样一种情况,每行中的选择数不同,可能有些行完全为空。 Numpy 必须能够一致地处理所有这些情况。根据掩码的内容返回不同形状的数组会慢得多,并且会导致很多问题。

要选择所需的列,请使用适当的索引:

a[:, ::3]

或者
a[:, [0, 3]]

关于python - 为什么二维 NumPy 数组的 boolean 索引会产生一维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118337/

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