【发布时间】:2020-10-06 16:21:50
【问题描述】:
3D 数组 A 的大小为 MxNxP。 二维矩阵 B 的大小为 MxN。 对于 B 的每一行,最多有一个大于零的元素。 示例:
B = [0 3 0; 2 0 0];
A = zeros(2,3,4);
我想随机填充 A,使其在第一行和第二列中恰好有三个,在第二行和第一列中恰好有两个。例如:
A(:,:,1) = [0 1 0; 0 0 0]
A(:,:,2) = [0 1 0; 1 0 0]
A(:,:,3) = [0 0 0; 1 0 0]
A(:,:,4) = [0 1 0; 0 0 0]
换句话说,B 元素表示在 A 的第三维中应该有多少个具有相同行和列索引的元素。 我目前可以使用循环来完成,但我期待以更有效的方式进行,因此没有循环,因为 M 和 N 在实践中非常大。 这是我的代码:
B = [0 3 0; 2 0 0];
A = zeros(2,3,4);
for i = 1:size(B,1)
[r,c] = max(B(i,:));
idx = randperm(size(A,3),r);
A(i,c,idx) = 1;
end
【问题讨论】:
-
这里“更高效”的指标是什么?代码很慢,还是你只想要少于 6 行?循环本身并不慢...
-
是的,代码很慢,因为 M 真的很大。这就是为什么我要求一个“更高效”的解决方案,这意味着我想要一个充分利用 MATLAB 矩阵操作的解决方案
标签: matlab multidimensional-array