我發現ndgrid
是最自然的解決方案,但這裏有一個有趣的方式來與奇數夫婦的kron
和repmat
做手工:
M = [kron(1:size(A,2),ones(1,size(A,1))).' ... %' row indexes
repmat((1:size(A,1))',size(A,2),1) ... %' col indexes
reshape(A.',[],1)] %' matrix values, read across
簡單調整往下看了,因爲是在MATLAB自然:
M = [repmat((1:size(A,1))',size(A,2),1) ... %' row indexes (still)
kron(1:size(A,2),ones(1,size(A,1))).' ... %' column indexes
A(:)] % matrix values, read down
(也因爲我的第一個答案是可恥的hackish。)
我還發現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
他說行的排列是不相關的,所以這應該是一樣的。這樣的行仍然是相同的。 (引用你的說明btw) – scenia