Indexing an array with a vector
古いコメントを表示
I would like to index an N-dimensional array with a vector of length N. In particular, for the 2-dimensional case I am currently doing the following.
A = rand(10);
v = randi(10,1,2);
v = num2cell(v);
A(v{:})
However, this approach seems horribly inefficient. Is there not a smarter way to convert the vector v to a proper index (comma-separated) for the array A?
Edit Let's say v = randi(10,1,2) = [ 3 5 ]. In that case, I want to obtain A(3,5).
4 件のコメント
Walter Roberson
2015 年 8 月 7 日
You can improve performance slightly by assigning the transpose to p1_off ahead of time, equivalent to if I had written
Aoff = cumprod([1 As(1:end-1)]) .';
and then just use * Aoff rather than * Aoff.'
Also the "-1" was important to add to the indices. It probably can be rolled into the calculation of the offset at the expense of clarity.
Jori
2015 年 8 月 7 日
採用された回答
その他の回答 (1 件)
Azzi Abdelmalek
2015 年 8 月 7 日
編集済み: Azzi Abdelmalek
2015 年 8 月 7 日
A = rand(10);
v = randi(10,1,2)
Why converting to cell array? just type
A(v)
If v is a cell array, convert it to a double array
A = rand(10);
v = randi(10,1,2);
v = num2cell(v);
A([v{:}])
4 件のコメント
Jori
2015 年 8 月 7 日
Azzi Abdelmalek
2015 年 8 月 7 日
You can use sub2ind function
Azzi Abdelmalek
2015 年 8 月 7 日
編集済み: Azzi Abdelmalek
2015 年 8 月 7 日
A = rand(10)
v = randi(10,1,2)
idx=sub2ind(size(A),v(1),v(2))
A(idx)
If v is nx2 array
idx=sub2ind(size(A),v(:,1),v(:,2))
A(idx)
カテゴリ
ヘルプ センター および File Exchange で Matrix Indexing についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
