рассчитывается, как показано в обновлении выше.

я есть трехмерная матрица и список пар (строка, столбец). Я хотел бы извлечь 2-мерную матрицу, которая соответствует элементам в этих положениях, спроецированных через глубину матрицы. Например, предположим,

>> a = rand(4, 3, 2)
a(:,:,1) =
    0.5234    0.7057    0.0282
    0.6173    0.2980    0.9041
    0.7337    0.9380    0.9639
    0.0591    0.8765    0.1693
a(:,:,2) =
    0.8803    0.2094    0.5841
    0.7151    0.9174    0.6203
    0.7914    0.7674    0.6194
    0.2009    0.2542    0.3600
>> rows = [1 4 2 1];
>> cols = [1 2 1 3];

Что я хотел бы получить,

0.5234    0.8765    0.6173    0.0282
0.8803    0.2542    0.7151    0.5841

возможно с некоторой перестановкой размеров. Кроме того, хотя этот пример имеет подстановочный знак в последнем измерении, у меня также есть случаи, когда он находится в первом или втором.

Я наивно пыталсяa(rows, cols, :) и получил 3d матрицу, где диагональная плоскость - это то, что я хочу. Я также нашелsub2ind, который извлечет нужные элементы изa(:,:,1) самолет. Я мог бы поработать с одним из них, чтобы получить то, что я хочу, но мне интересно, есть ли более канонический, элегантный или эффективный метод, который мне не хватает?

Обновить

Это было решение, которое я использовал, основываясь на ответе, опубликованном ниже,

sz = size(a);
subs = [repmat(rows, [1, sz(3)]);
     repmat(cols, [1, sz(3)]);
     repelem([1:sz(3)], length(rows))];
result = a(sub2ind(sz, subs(1,:), subs(2,:), subs(3,:)));

Ответы на вопрос(1)

Ваш ответ на вопрос