0

我正在尝试按照文档中的描述排列一个数组(实际是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));

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

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

4

2 回答 2

1

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

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

于 2018-04-08T11:34:44.160 回答
0

我有同样的问题。我认为 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;
}
于 2021-09-02T08:28:29.827 回答