Selecting Elements of a Matrix by Indexing with a Vector

1 次查看(过去 30 天)
I have a 100x3 matrix and I'd like to select one element from each row to form a 100x1 vector. Given a vector of 100 indeces between 1-3, how can I obtain this? The code below is what I thought should work, but instead produces a 100x100 matrix (concatenation of each 100x1 vector generated by each value of indx).
A = rand(100,3);
indx = randi([1 3],100,1); % for each row, which column do I want to pull the element from?
B = A(:,indx); % B is 100x100, I want 100x1

采纳的回答

Ameer Hamza
Ameer Hamza 2020-4-23
编辑:Ameer Hamza 2020-4-23
See sub2ind() function.
A = rand(100,3);
indx = randi([1 3],100,1);
idx = sub2ind(size(A), (1:size(A,1)).', indx);
B = A(idx);
  2 个评论
Darren Wethington
Darren Wethington 2020-4-23
This worked, I was just hoping to not have to sub2ind it and was curious if there was a more straightforward way. I'll use this, thanks.
Ameer Hamza
Ameer Hamza 2020-4-23
I think sub2ind is the simplest way to do such a thing. Following avoids sub2ind, but I am not sure you can call it straightforward
A = rand(100,3);
indx = randi([1 3],100,1);
ind = (1:size(A,1)).' + (indx-1).*size(A,1);
B = A(ind);

请先登录,再进行评论。

更多回答(1 个)

David Hill
David Hill 2020-4-23
A = rand(100,3);
indx = randi([1 3],100,1);
B = A(1:100,indx);

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by