例如,假设我有一个矩阵
5 6 7
1 2 3
我希望更改矩阵的每个元素,使它们包含位置信息,并形成一个新的矩阵。喜欢
(5, 1, 1) (6, 1, 2) (7, 1, 3)
(1, 2, 1) (2, 2, 2) (3, 2, 3)
有什么想法吗?
答案 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维功能。