是否可以用列表替换矩阵中的值?

时间:2017-10-16 13:37:22

标签: matlab matrix octave

例如,假设我有一个矩阵

5 6 7 

1 2 3

我希望更改矩阵的每个元素,使它们包含位置信息,并形成一个新的矩阵。喜欢

(5, 1, 1) (6, 1, 2) (7, 1, 3)

(1, 2, 1) (2, 2, 2) (3, 2, 3)

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以将它们作为单元格数组。 如果原始矩阵称为dat,

dat = [5 6 7; 1 2 3];
for i = 1:size(dat,1)
   for j = 1:size(dat,2)
      newdat{i,j} = [dat(i,j),i,j]
   end
end

答案 1 :(得分:0)

为列表元素使用其他维度

如果所有元素都有相同的列表长度关联,那么问题总是如此,我建议使用矩阵的附加维度来存储列表元素。

% your data
dat = [5 6 7; 1 2 3];
% Size of your data
s = size(dat)
% Create a target array with an added dimension with 3 elements
% 1st is your original data
% 2nd is first position index
% 3rd is second position index
dat1 = zeros([s,3]);
% Create an array with subscripts
[i1,i2] = ind2sub(s,1:numel(dat));
% fill in original data
dat1(:,:,1) = dat;
% Assign subscripts to your array
dat1(:,:,2) = reshape(i1,s);
dat1(:,:,3) = reshape(i2,s);
% Display result
dat1

此解决方案具有高效的运行时和内存行为,完全向量化(不适用于循环),并且可以扩展到更多维度或稍微努力到n维功能。