0

有人能帮助我吗?

我有一个 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
 ...

结果不保留原始矩阵的结构。我希望结果与上一个示例中的结果相同,但我想使用第二列进行替换。最好的方法是什么?

4

1 回答 1

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.

另外,关于术语的注释,矩阵被定义为只有两个维度。

于 2013-09-20T20:07:12.490 回答