Nd4j 置换不置换 - 我做错了什么?

Nd4j permute does not permute - what have I done wrong?

我正在尝试按照 documentation (actual a link to mathworks) 中的描述排列数组。

但是我的代码没有重现结果。实际上,我的代码似乎什么也没做:

INDArray foobar = Nd4j.linspace(0, 2, 3);
System.out.println("foobar = " + foobar);
System.out.println("foobar.permute(2, 1, 0) = " + foobar.permute(2, 1, 0));

foobarfoobar.permute 的输出相同。 我哪里搞砸了?

可选:任何关于置换如何(语法方面)使用更高维度(如 2d 或 3d 矩阵)的信息将不胜感激。

根据您链接到的文档,置换方法用于置换 multi-dimensional 数组的维度。 Nd4j.linspace 创建一个向量(一维数组)。由于只有一个维度,因此没有其他维度可以用来排列它。另一方面,Mathworks 上的示例创建了一个 3 维数组并排列了第 1 维和第 3 维。

听起来您的意图是排列数组的各个元素(而不是整个维度)。我还没有在 Nd4j 中看到这种方法。

我遇到了同样的问题。我认为 Nd4j 内部没有方法。 我写了一个方法来重新排序 ND4j 向量。

publin INDArray reorder(int[] index) {
        INDArray copy = q.dup();
        for (int i=0; i<copy.length(); i++){
            copy.put(i, q.getScalar(index[i]));
        }
        return copy;
}