更简单的方法来创建矩阵/索引列表?

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)

除了看起来第二列应该代替第一列这一事实,是否有更"紧凑"的方式以更紧凑的方式创建相同或相似的矩阵?

如果存在一个只接受任意多维数组并返回它的索引表的函数,那将是很好的.

DSM*_*DSM 6

你可以使用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.)