【发布时间】:2021-06-02 20:35:46
【问题描述】:
我有一段 我知道可以工作的 numpy 代码。我知道这一点,因为我已经在我的通用案例中成功地对其进行了测试。但是,经过两个小时来回参考文档和反复试验后,我得出了解决方案。我无法理解我怎么会知道如何直观地。
设置:
a = np.zeros((5,5,3))
目标:设置为 1 轴 1 的索引 0,1、轴 2 的 0,1、轴 3 的所有索引和轴 1 的索引 3,4、轴 2 的索引 3,4、轴 3 的所有索引
更明确的目标:将块 1 和 2 的前两行设置为 1,将块 3 和 4 的最后两行设置为 1
结果:
ax1 =np.array([np.array([0,1]),np.array([3,4])])
ax1 =np.array([x[:,np.newaxis] for x in ax1])
ax2 = np.array([[[0,1]],[[3,4]]])
a[ax1,ax2,:] = 1
a
输出:
array([[[1., 1., 1.],
[1., 1., 1.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[1., 1., 1.],
[1., 1., 1.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[1., 1., 1.],
[1., 1., 1.]],
[[0., 0., 0.],
[0., 0., 0.],
[0., 0., 0.],
[1., 1., 1.],
[1., 1., 1.]]])
我倾向于相信我应该能够通过查看相关矩阵的形状、索引的形状和索引操作来直观地了解输出。但是,我无法将这个故事放在我的脑海中。比如,它正在改变的子空间的最终形状是什么? 您如何解释其工作原理?
形状:
input: (5, 5, 3)
ind1: (2, 2, 1)
ind2: (2, 1, 2)
final_op: input[ind1, ind2, :]
【问题讨论】:
-
你能把你的问题说得更清楚吗?如,更量化?
-
我想我现在可以为后人澄清这个问题,因为阅读@hpaulij 的回答让一切变得清晰。
标签: python numpy matrix-indexing advanced-indexing