Hi all,
Imagine there is a m by m matrix, I'd like to extract the [p, q] element, while [p, q] is the output of some calculations. For instance:
K>> a = rand(3)
a =
0.88517 0.098712 0.67973
0.91329 0.26187 0.13655
0.79618 0.33536 0.72123
K>> b = [2 3]
b =
2 3
K>> a(b)
ans =
0.91329 0.79618
Here b is the location, which should be the 2nd row, 3rd column. However, here Matlab gives the 2nd and 3rd element by column indexing. What I want is 0.13655.
I know I can use:
K>> a(b(1), b(2))
ans =
0.13655
But this is manual, my matrix may have random dimension, so I prefer something like a(b), any ideas?

 채택된 답변

Stephen23
Stephen23 2017년 11월 3일
편집: Stephen23 2017년 11월 3일

1 개 추천

Simply use num2cell and sub2ind, then indices are not required:
>> c = num2cell(b);
>> a(sub2ind(size(a),c{:}))
ans = 0.13655

추가 답변 (1개)

KL
KL 2017년 11월 3일
편집: KL 2017년 11월 3일

1 개 추천

use sub2ind
[row, col] = sub2ind(size(a),b(:,1),b(:,2))
or directly
a(sub2ind(size(a),b(:,1),b(:,2)))

댓글 수: 2

No, the manual index is what i'm trying to avoid, i.e. there cannot be:
b(:, 1), b(:, 2)
Xiaohan Du
Xiaohan Du 2017년 11월 3일
Steve's answer is correct, but thanks anyway.

댓글을 달려면 로그인하십시오.

카테고리

도움말 센터File Exchange에서 Matrix Indexing에 대해 자세히 알아보기

태그

질문:

2017년 11월 3일

편집:

2017년 11월 3일

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by