Tôi có vectơ y có độ dài n. y (i) là một số nguyên trong 1 giờ. Có cách nào đơn giản hơn để chuyển đổi y thành một ma trận lôgic n x m, trong đó yy (i, j) = 1 nếu y (i) = j, nhưng 0 nếu không? Đây là cách tôi đã làm nó:Chuyển đổi vectơ thành ma trận logic?
% If m is known (m = 3 here), you could write it out all at once
yy = [y == 1; y== 2; y == 3];
yy = reshape(yy, n, 3);
hoặc
% if m is not known ahead of time
yy = [ y == 1 ];
for i = 2:m;
yy = [ yy; y == i ];
end
yy = reshape(yy, n, m);
Tôi tìm thấy một cách khác ... không chắc chắn nếu điều này là tốt hơn ... nhưng ít nhất nó phù hợp trên một dòng: yy = repmat (y, 1, m) == repmat (1: m, n, 1); – notrick
'bsxfun' nằm trong số các hàm Matlab đa luồng. Do đó, nó có khả năng nhanh hơn các giải pháp của bạn. – Jonas