python - Numpy 双切片赋值,整数索引后跟 bool 索引

标签 python numpy slice

我已经知 Prop 有奇特索引的 Numpy“双切片”会创建副本而不是 View ,解决方案似乎是将它们转换为单个切片(例如 This question )。然而,我面临着这个特殊的问题,我需要处理整数索引,然后处理 bool 索引,但我不知道该怎么办。问题(简化)如下:

a = np.random.randn(2, 3, 4, 4)
idx_x = np.array([[1, 2], [1, 2], [1, 2]])
idx_y = np.array([[0, 0], [1, 1], [2, 2]])
print(a[..., idx_y, idx_x].shape) # (2, 3, 3, 2)
mask = (np.random.randn(2, 3, 3, 2) > 0)
a[..., idx_y, idx_x][mask] = 1 # assignment doesn't work

如何才能完成作业?

最佳答案

不确定,但一个想法是手动进行广播并分别添加掩码,就像蒂姆建议的那样。 idx_xidx_y 都具有相同的形状 (3,2),它们将被广播到形状 (6,6) 来自笛卡尔积 (3*2)^2。

x = np.broadcast_to(idx_x.ravel(), (6,6))
y = np.broadcast_to(idx_y.ravel(), (6,6))

# this should be the same as
x,y = np.meshgrid(idx_x, idx_y)

现在将掩码 reshape 为广播索引并使用它来选择

mask = mask.reshape(6,6)
a[..., x[mask], y[mask]] = 1

该作业现在可以运行,但我不确定这是否是您想要的作业。

关于python - Numpy 双切片赋值,整数索引后跟 bool 索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67354192/

相关文章:

python - 非线性回归中的标准误差

types - slice 类型

python - 如何使用 secret 管理器编写用于 RDS 密码轮换的 lambda 函数?

python - python中的构造函数特化

Python - Pandas 使用 np.where 创建列以获取多个不同的值

Javascript 二维数组行删除

python-3.x - 使用 Python 进行多重切片分配

python - 禁用 Python 单元测试仅用于自动执行?

python - 如何使用python将其中包含unicode的字符串转换为unicode

python - 使用 Numpy(坐标变换)计算长表达式?