我认为
ndgrid
是最自然的解决方案,但以下是一种有趣的手动方法,使用了
kron
和
repmat
:
M = [kron(1:size(A,2),ones(1,size(A,1))).' ...
repmat((1:size(A,1))',size(A,2),1) ...
reshape(A.',[],1)]
简单调整以向下阅读,与MATLAB自然一致:
M = [repmat((1:size(A,1))',size(A,2),1) ...
kron(1:size(A,2),ones(1,size(A,1))).' ...
A(:)]
(由于我的第一个答案非常粗糙)
我认为
kron
也是一个不错的工具,可以逐个复制每个元素,而不是像
repmat
一样一次性复制整个数组。例如:
>> 1:size(A,2)
ans =
1 2 3
>> kron(1:size(A,2),ones(1,size(A,1)))
ans =
1 1 1 2 2 2 3 3 3
将其进一步发展,我们可以生成一个名为
repel
的新函数,以复制数组的元素而不是整个数组:
>> repel = @(x,m,n) kron(x,ones(m,n));
>> repel(1:4,1,2)
ans =
1 1 2 2 3 3 4 4
>> repel(1:3,2,2)
ans =
1 1 2 2 3 3
1 1 2 2 3 3
ind2sub(size(A), 1:numel(A))
。 - Notlikethat