【发布时间】:2023-01-11 07:54:22
【问题描述】:
我有一个多维数组,并且有两个整数列表,L_i 和 L_j,对应于我要保留的 axis-i 和 axis-j 的元素。我还想满足以下条件:
- 保持数组的原始维度,即使 L_i 或 L_j 仅包含 1 个元素(换句话说,我不想要一个单例 要折叠的轴)
- 保留轴的顺序
最干净的方法是什么?
这是一个可重现的示例,显示了我遇到的一些意外行为:
import numpy as np aa = np.arange(120).reshape(5,4,3,2) aa.shape ### (5,4,3,2) as expected aa[:,:,:,[0,1]].shape ### (5, 4, 3, 2) as expected aa[:,:,:,[0]].shape ### (5,4,3,1) as desired. Notice that even though the [0] is one element, ### that last axis is preserved, which is what I want aa[:,[1,3],:,[0]].shape ### (2, 5, 3) NOT WHAT I EXPECTED!! ### I was expecting (5, 2, 3, 1)想知道为什么 numpy 正在折叠和重新排序轴,也是正确进行子集化的最佳方法。
【问题讨论】:
-
试试
aa[:, :1, :, :1] -
虽然这适用于我给出的玩具示例,但如果 L_i = [0, 3, 4] 或其他一些非连续范围怎么办?
-
如果,真的。制作一个实际的 MCVE
-
我相信我的例子是 MVCE。它演示了使用列表为各种轴选择索引的奇怪之处,即使我的特定选择确实有一个硬编码的解决方法。话虽如此,我将调整我的示例,使其无法使用“:1”表示法解决