相关疑难解决方法(0)

在numpy数组中得到第k个维度的第i个切片

我有一个n维度numpy数组,我想获得-th维度的i第一个切片k.必须有比这更好的东西

# ... 
elif k == 5:
    b = a[:, :, :, :, :, i, ...]
# ...
Run Code Online (Sandbox Code Playgroud)

python arrays numpy

6
推荐指数
1
解决办法
417
查看次数

numpy多维索引和函数“ take”

在一周的奇数天,我几乎可以理解numpy中的多维索引。Numpy具有函数“ take”,该函数似乎可以实现我想要的功能,但是额外的好处是,我可以控制如果索引超出范围时会发生什么情况。具体来说,我有一个3维数组作为查询表来询问

lut = np.ones([13,13,13],np.bool)
Run Code Online (Sandbox Code Playgroud)

和一个2x2的3个长向量数组,用作表的索引

arr = np.arange(12).reshape([2,2,3]) % 13 
Run Code Online (Sandbox Code Playgroud)

IIUC,如果我要写的lut[arr]话,arr则被视为2x2x3的数字数组,当这些数字用作索引时,lut它们各自返回13x13的数组。这解释了原因lut[arr].shape is (2, 2, 3, 13, 13)

我可以通过写来做自己想要的

lut[ arr[:,:,0],arr[:,:,1],arr[:,:,2] ] #(is there a better way to write this?)
Run Code Online (Sandbox Code Playgroud)

现在这三个术语的作用就好像它们已被压缩以生成2x2的元组数组并lut[<tuple>]从生成单个元素lut。最终结果是2x2的条目数组lut,正是我想要的。

我已经阅读了'take'功能的文档...

此功能与“奇特”索引(使用数组索引数组)具有相同的作用;但是,如果您需要沿给定轴的元素,则使用起来会更容易。

axis:int,可选
在其上选择值的轴。

也许天真地,我认为设置axis=2我将获得三个值以用作三元组来执行查找,但是实际上

np.take(lut,arr).shape =  (2, 2, 3)
np.take(lut,arr,axis=0).shape =  (2, 2, 3, 13, 13)
np.take(lut,arr,axis=1).shape =  (13, 2, 2, 3, 13)
np.take(lut,arr,axis=2).shape =  (13, 13, 2, 2, …
Run Code Online (Sandbox Code Playgroud)

python indexing numpy multidimensional-array

5
推荐指数
2
解决办法
1774
查看次数

标签 统计

numpy ×2

python ×2

arrays ×1

indexing ×1

multidimensional-array ×1