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)
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)
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 个评论
Jos (10584)
2018-2-28
This might not be the most efficient way though.
See the documentation of sparse for more details.
更多回答(2 个)
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
0 个评论
另请参阅
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!