【问题标题】:What is the best way to do multi-dimensional indexing with numpy?用 numpy 进行多维索引的最佳方法是什么?
【发布时间】:2016-03-08 07:58:27
【问题描述】:

我正在尝试对 3D numpy 数组进行一些索引。 基本上我有一个数组phi,其形状为(F,A,D);例如(5, 3, 7)。生成,例如如下:

F=5; A=3; D=7; phi = np.random.random((F,A,D))

我的目标是能够使用[[0,1,2],[5,5,6]] 等二维数组对AD 进行索引,这意味着将在第三维中以0 索引的值作为@ 中的第一个位置987654328@,在第三维中以 1 为索引的值是 A 的第二个位置,依此类推。结果的形状应为(F,A,2)(F,2,A)

这相当于手动循环“索引器数组”的所有值,例如:

phi[:,0,0]; phi[:,1,1]; phi[:,2,2]
phi[:,0,5]; phi[:,1,5]; phi[:,2,6]

直觉上我会做类似phi[:,:,[[0,1,2],[3,3,3]]]的事情,但它的形状最终是(5, 3, 2, 3)

关于如何获得正确结果的任何想法?

【问题讨论】:

  • 你能说得更具体点吗?举一个简单的例子,告诉我们输出应该是什么样子
  • @plonser:好的,添加编辑...
  • @plonser:添加外部循环扩展作为示例
  • 你预期的形状是不是错字?考虑到您的预期结果,不应该是(F,2,A)吗?

标签: python arrays numpy multidimensional-array indexing


【解决方案1】:

我想这就是你想要的

phi[:,range(A),[[0,1,2],[5,5,6]]]

你的尝试

phi[:,:,[[0,1,2],[5,5,6]]]

为前两个维度的每个值沿第三个维度取值,因此您最终会得到(5,3,2,3) 的形状。

但是,根据您的示例,您希望通过range(A) 和numpy 的广播在我的代码中实现第二维的持续增加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-05-20
    • 2010-11-25
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多