Bed of Nails from vectors - inverse of find()?

3 次查看(过去 30 天)
Hello,
I would like to do the following:
X = zeros(N,M); % Say N = 50, M = 100
Then have N sets of indices, one for each row of X:
a(1,:) = [ 1 5 10 12 19 32 56 ...]; % These may vary substantially
a(2,:) = [ 1 7 14 19 29 45 76 ...];
...
These are then indices that will indicate where there should be a "1" in each row of X.
Is there a function that will take the indices and then put a "1" in an array? This is kind of like the inverse of find().
Thanks!
Doug Anderson
  2 个评论
Jos (10584)
Jos (10584) 2018-2-27
As your variable a is a N-by-K matrix, this assumes that all rows of X will hold K ones. Is that so?

请先登录,再进行评论。

采纳的回答

Jos (10584)
Jos (10584) 2018-2-27
% input
N = 5 ; M = 4 ;
a = [1 3 ; 2 4 ; 1 4 ; 1 2 ; 3 4]
% engine in one line
XX = full(sparse(repmat(1:N, size(a,2), 1)', a, 1,N,M))
  2 个评论
Douglas Anderson
Douglas Anderson 2018-2-27
Thanks to everyone. Of course, this is only the deepest level of a bunch of calculations to determine the "a" values, so this one-line engine is nice.
Can you tell me why this works? :) Thank you!
Jos (10584)
Jos (10584) 2018-2-28
This might not be the most efficient way though.
See the documentation of sparse for more details.

请先登录,再进行评论。

更多回答(2 个)

Sean de Wolski
Sean de Wolski 2018-2-27
for ii = 1:size(x, 1)
x(ii, a(ii,:)) = 1;
end

Jos (10584)
Jos (10584) 2018-2-27
N = 5 ; M = 4 ;
a = [1 3 ; 2 4 ; 1 4 ; 1 2 ; 3 4]
X = zeros(N,M)
X(sub2ind([N M], repmat(1:N, size(a,2), 1)', a)) = 1

类别

Help CenterFile Exchange 中查找有关 Programming 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by