让我们说
g(:,:,1) = [ 1; 4; 7]
g(:,:,2) = [11; 44; 77]
g(:,:,3) = [111; 444; 777] .
让我们说a = [2; 3; 1]
和b = [1; 3; 2]
。我希望输出像这样
[4;777;11]
。第一个元素是g(2,:,1)
,第二个元素是g(3,:,3)
,第三个元素是g(1,:,2)
。
答案 0 :(得分:2)
这很简单 -
[m,n,r] = size(g)
out = g(a + (b-1)*m*n)
对于一般情况,当您还要指定列号时 -
out = g(a + (col_num-1)*m + (b-1)*m*n)
对于更通用的情况,当您想要指定的不仅仅是一列时 -
g(bsxfun(@plus,(col_nums-1)*m,a(:)+(b(:)-1)*m*n))
对于更通用的案例,您必须提出更难的问题。
示例运行 -
>> g
g(:,:,1) =
11 81 26 19 87
96 87 80 27 58
1 9 43 15 55
77 40 91 14 15
g(:,:,2) =
85 40 19 90 34
62 8 24 94 90
35 24 42 49 37
51 13 5 49 12
g(:,:,3) =
78 10 57 82 65
39 14 6 2 73
24 94 24 5 65
40 95 35 17 45
>> [m,n,r] = size(g);
>> a = [2,3,1]; b = [1,3,2];
>> col_nums = [1 3];
>> g(bsxfun(@plus,(col_nums-1)*m,a(:)+(b(:)-1)*m*n))
ans =
96 80
24 24
85 19