有人可以帮助我吗?
我有一个4x5x3矩阵和2x1列。
matrix = ones(4,5,3);
column = ones(2,1);
matrix(1,1,1) = 2;
column(2,1) = 34;
当我使用列替换矩阵中的值时,所有工作都按预期工作:
column(matrix)
ans(:,:,1) =
34 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
ans(:,:,2) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
ans(:,:,3) =
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
最后我有相同的矩阵,但有替代值。
然而,当我这样做的时候:
matrix = ones(4,5,3);
column = ones(2,2);
matrix(1,1,1) = 2;
column(2,2) = 34;
column(matrix, 2)
ans =
34
1
1
1
1
1
1
1
1
1
1
1
...
结果不保留原始矩阵的结构。我希望结果与前一个示例中的结果相同,但我想使用第二列进行替换。最好的方法是什么?
答案 0 :(得分:2)
您可以通过预分配输出数组来强制维度:
out = zeros(size(array));
out(:) = column(array, 2)
一些时间(假设您事先知道array
的大小):
sz = [4,5,3];
array = ones(sz);
array(1) = 2;
column = ones(2);
column(4) = 34;
N = 1e6;
% extract column
tic
for ii = 1:N
tmp = column(:,2);
out1 = tmp(array);
end
toc
% Preallocate
tic
for ii = 1:N
out2 = zeros(sz);
out2(:) = column(array, 2);
end
toc
% Reshape
tic
for ii = 1:N
out3 = reshape(column(array, 2),sz);
end
toc
结果:
Extract column: 2.714575 seconds.
Preallocate: 7.179845 seconds.
Reshape: 6.455695 seconds.
另外,关于术语的注释,矩阵被定义为仅具有两个维度。