fst*_*tab 0 python arrays numpy matrix indices
我想知道什么是最简单的方法来创建一个二维数组,每个行的索引到另一个多维数组.
例如,假设我有一个4x4的立方体,"indices matrix"将是以下内容:
np.concatenate([
np.expand_dims(curr.ravel(),axis=0).T
for curr
in np.meshgrid(
np.arange(4),
np.arange(4),
np.arange(4)
)
],axis=1)
Run Code Online (Sandbox Code Playgroud)
结果如下:
array([[0, 0, 0],
[0, 0, 1],
[0, 0, 2],
[0, 0, 3],
[1, 0, 0],
[1, 0, 1],
...
[2, 3, 2],
[2, 3, 3],
[3, 3, 0],
[3, 3, 1],
[3, 3, 2],
[3, 3, 3]])
Run Code Online (Sandbox Code Playgroud)
除了看起来第二列应该代替第一列这一事实,是否有更"紧凑"的方式以更紧凑的方式创建相同或相似的矩阵?
如果存在一个只接受任意多维数组并返回它的索引表的函数,那将是很好的.
你可以使用np.indices:
>>> a = np.random.random((4,4,4))
>>> np.indices(a.shape).reshape((a.ndim, -1)).T
array([[0, 0, 0],
[0, 0, 1],
[0, 0, 2],
[0, 0, 3],
[0, 1, 0],
[0, 1, 1],
[...]
[3, 3, 2],
[3, 3, 3]])
Run Code Online (Sandbox Code Playgroud)
还有其他实用程序np.ndindex,具体取决于您的用例.(FWIW我不认为获得你正在寻找的形式的坐标会像你想象的那样有用,但是YMMV.)