gpt4 book ai didi

python - 了解 numpy 中奇怪的 bool 二维数组索引行为

转载 作者:IT老高 更新时间:2023-10-28 21:11:37 26 4
gpt4 key购买 nike

为什么会这样:

a = np.random.rand(10, 20)
x_range = np.arange(10)
y_range = np.arange(20)

a_tmp = a[x_range<5,:]
b = a_tmp[:, np.in1d(y_range, [3,4,8])]

但事实并非如此:

a = np.random.rand(10,20)
x_range = np.arange(10)
y_range = np.arange(20)

b = a[x_range<5, np.in1d(y_range,[3,4,8])]

最佳答案

Numpy 引用文档的 page on indexing包含答案,但需要仔细阅读。

这里的答案是,使用 bool 值索引等同于使用通过首先使用 np.nonzero 转换 bool 数组获得的整数数组进行索引。因此,对于 bool 数组 m1m2

a[m1, m2] == a[m1.nonzero(), m2.nonzero()]

其中(成功时,即 m1.nonzero().shape == m2.nonzero().shape)相当于:

[a[i, i] for i in range(a.shape[0]) if m1[i] and m2[i]]

我不知道为什么它被设计成这样工作 --- 通常,这不是你想要的。

要获得更直观的结果,您可以改为这样做

a[np.ix_(m1, m2)]

产生相当于

的结果
[[a[i,j] for j in range(a.shape[1]) if m2[j]] for i in range(a.shape[0]) if m1[i]]

关于python - 了解 numpy 中奇怪的 bool 二维数组索引行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7820809/

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