gpt4 book ai didi

python - 2d numpy 掩码未按预期工作

转载 作者:行者123 更新时间:2023-12-01 02:08:03 25 4
gpt4 key购买 nike

我正在尝试通过删除选择索引将 2x3 numpy 数组转换为 2x2 数组。

我想我可以使用具有真/假值的掩码数组来做到这一点。

给定

 [ 1,  2,  3],
[ 4, 1, 6]

我想从每一行中删除一个元素来给我:

 [ 2,  3],
[ 4, 6]

但是这个方法并不像我期望的那样工作:

import numpy as np

in_array = np.array([
[ 1, 2, 3],
[ 4, 1, 6]
])

mask = np.array([
[False, True, True],
[True, False, True]
])

print in_array[mask]

给我:

[2 3 4 6]

这不是我想要的。有什么想法吗?

最佳答案

唯一“错误”的是它的形状 - 1d 而不是 2。但是如果你的面具是

mask = np.array([
[False, True, False],
[True, False, True]
])

第一行有 1 个值,第二行有 2 个值。它无法将其作为二维数组返回,不是吗?

因此,像这样的掩码时的默认行为是返回 1d 或 raveled 结果。

像这样的 bool 索引实际上是一个 where 索引:

In [19]: np.where(mask)
Out[19]: (array([0, 0, 1, 1], dtype=int32), array([1, 2, 0, 2], dtype=int32))
In [20]: in_array[_]
Out[20]: array([2, 3, 4, 6])

它找到掩码中为真的元素,然后选择in_array中的相应元素。

也许 where 的转置更容易可视化:

In [21]: np.argwhere(mask)
Out[21]:
array([[0, 1],
[0, 2],
[1, 0],
[1, 2]], dtype=int32)

并迭代索引:

In [23]: for ij in np.argwhere(mask):
...: print(in_array[tuple(ij)])
...:
2
3
4
6

关于python - 2d numpy 掩码未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48874102/

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