我有一個大小爲[S1, S2, S3]
的矩陣M
。基於一維索引列表有效地將值分配給多維數組
我有另一個矩陣K
作爲我想分配的第一個維度的索引,大小爲[1, S2, S3]
。
And V
是一個[1, S2, S3]
矩陣,它包含要相應分配的值。
隨着循環,這是我做的:
for x2 = 1:S2
for x3 = 1:S3
M(K(1,x2,x3), x2, x3) = V(1, x2, x3)
endfor % x3
endfor % x2
有沒有更有效的方式來做到這一點?
可視化2D情況:
M = 1 4 7 10 2 5 8 11 3 6 9 12 K = 2 1 3 2 V = 50 80 70 60 Desired = 1 80 7 10 50 5 8 60 3 6 70 12
測試用例:
M = reshape(1:24, [3,4,2]) K = reshape([2,1,3,2,3,3,1,2], [1,4,2]) V = reshape(10:10:80, [1,4,2]) s = size(M) M = assign_values(M, K, V) M = ans(:,:,1) = 1 20 7 10 10 5 8 40 3 6 30 12 ans(:,:,2) = 13 16 70 22 14 17 20 80 50 60 21 24
我在尋找實現assign_values
有一種有效的方式。
莫名其妙運行Gelliant的回答給了我這樣的:
key = sub2ind(s, K, [1:s(2)]) error: sub2ind: all subscripts must be of the same size
而不是'K = sub2ind(s,K,[1:s(1)])'它一定是'K = sub2ind(s,K,[1:s(2)]', – Irreducible
謝謝,我更新了我的答案。 – Gelliant
嗯,它說'所有的下標必須是相同的大小'(我正在使用八度)。 – justhalf