[英]NumPy: use 2D index array from argmin in a 3D slice
我正在尝试使用来自 argmin(或相关的 argmax 等函数)的二维索引数组来索引大型 3D arrays。 这是我的示例数据:
import numpy as np
shape3d = (16, 500, 335)
shapelen = reduce(lambda x, y: x*y, shape3d)
# 3D array of [random] source integers
intcube = np.random.uniform(2, 50, shapelen).astype('i').reshape(shape3d)
# 2D array of indices of minimum value along first axis
minax0 = intcube.argmin(axis=0)
# Another 3D array where I'd like to use the indices from minax0
othercube = np.zeros(shape3d)
# A 2D array of [random] values I'd like to assign in othercube
some2d = np.empty(shape3d[1:])
此时,3D arrays 的形状相同,而minax0
数组的形状为 (500, 335)。 现在我想将二维数组some2d
中的值分配给 3D 数组othercube
,使用minax0
作为第一维的索引 position。 这是我正在尝试的,但不起作用:
othercube[minax0] = some2d # or
othercube[minax0,:] = some2d
抛出错误:
ValueError:花式索引中的尺寸太大
注意:我目前正在使用,但不是非常 NumPythonic:
for r in range(shape3d[1]):
for c in range(shape3d[2]):
othercube[minax0[r, c], r, c] = some2d[r, c]
我一直在挖掘 web 以找到可以索引othercube
的类似示例,但我没有找到任何优雅的东西。 这需要高级索引吗? 有小费吗?
花哨的索引可能有点不直观。 幸运的是,本教程有一些很好的例子。
基本上,您需要定义每个minidx
应用的 j 和 k。 numpy 并没有从形状中推断出来。
在你的例子中:
i = minax0
k,j = np.meshgrid(np.arange(335), np.arange(500))
othercube[i,j,k] = some2d
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.