Chcę przekonwertować wektor indeksów na macierz z wartościami w kolumnach indeksów.Konwersja wektora indeksów w macierz
x = [2;1;3;1];
m = someFunc(x,3)
% m =
%
% 0 1 0
% 1 0 0
% 0 0 1
% 1 0 0
Chcę przekonwertować wektor indeksów na macierz z wartościami w kolumnach indeksów.Konwersja wektora indeksów w macierz
x = [2;1;3;1];
m = someFunc(x,3)
% m =
%
% 0 1 0
% 1 0 0
% 0 0 1
% 1 0 0
Jednym ze sposobów jest wykorzystanie funkcji SUB2IND:
colN = 3;
assert(max(x)<=colN,'Not enough columns') %# check that you have enough columns
%# other checks that x is valid indices
m = zeros(numel(x),colN);
m(sub2ind(size(m),1:numel(x),x')) = 1;
miałem bardzo podobne pytanie, więc nie ma otworzyć nowy. Chciałem przekształcić wektor wierszy indeksów w macierz z wierszami (zamiast kolumn) indeksów. Mógłbym użyć poprzedniej odpowiedzi i odwrócić ją, ale myślałem, że to będzie lepiej z bardzo dużymi matrycami.
octave> x = [2 1 3 1];
octave> m = setRowsToOne(x, 3)
m =
0 1 0 1
1 0 0 0
0 0 1 0
Nie mogłem zobaczyć, jak użyć sub2ind, aby to osiągnąć, więc sam to obliczyłem.
function matrixResult = setRowsToOne(indexOfRows, minimumNumberOfRows)
numRows = max([indexOfRows minimumNumberOfRows]);
numCols = columns(indexOfRows);
matrixResult = zeros(numRows, numCols);
assert(indexOfRows > 0, 'Indices must be positive.');
matrixResult(([0:numCols-1]) * numRows + indexOfRows) = 1;
end
x = [2 1 3 1];
m = setRowsToOne(x, 3)
Testowałem funkcję sub2ind, ale na forum Coursera Machine Learning zostałem wskazany na to piękno.
m = eye(num_cols)(x,:);
Używa macierzy tożsamości, aby wybrać odpowiednią kolumnę na podstawie wartości na x.
Można użyć accumarray
co sprawia, że to bardzo łatwe, jak w przykładzie:
accumarray([ (1:length(x))', x ], 1, [4, 3])
1:length(x)
część określa się, które wiersze te iść i x
do której kolumny.
możliwy duplikat [Jak mogę zmienić wartości wielu punktów w macierzy?] (Http://stackoverflow.com/questions/6850368/how-can-i-change-the-values-of-multiple- point-in-a-matrix) – gnovice