Qling
1
比如我有个a
a = ones(2, 2, 3);
a[:, :, 1] = [1 1; 1 1];
a[:, :, 2] = [2 2; 2 2];
a[:, :, 3] = [3 3; 3 3]
得到的a
长这样
2×2×3 Array{Float64,3}:
[:, :, 1] =
1.0 1.0
1.0 1.0
[:, :, 2] =
2.0 2.0
2.0 2.0
[:, :, 3] =
3.0 3.0
3.0 3.0
我想随机shuffle这个tensor,比如变得的结果是这样的:
[:, :, 1] =
3.0 3.0
3.0 3.0
[:, :, 2] =
1.0 1.0
1.0 1.0
[:, :, 3] =
2.0 2.0
2.0 2.0
只改变第三个维度的顺序, 而不改变每个子矩阵的信息。我要怎么做?我试过用Random包的shuffle,但它会改变矩阵的内容。
a[:, :, randperm(size(a, 3))]
or,
a[:, :, shuffle(axes(a, 3))]
3 个赞
Jun
3
如果要 in-place的话,可以自己动手写个 2 层的 for 循环 shuffle 下,
1 个赞
Qling
4
我想到的第三种
a[:, :, shuffle(1: size(a, 3))]
速度上,randperm最快,接着axes,接着我的这个。应该跟randperm和shuffle的实现有关系