У меня есть матрица X с размером (8,1500) и Y с матрицей (2,1500). Как я могу извлечь 100 случайных столбцов из обеих матриц?
Это означает, что если я извлекаю столбец 20 из матрицы X, я должен сделать то же самое для матрицы Y.
Это то, что вы ищете?
A = rand( 8,1500 );
B = rand( 2,1500 );
ncol = 100;
cols = ceil( rand( ncol, 1 ) * 1500 );
Ac = zeros( 8, ncol );
Bc = zeros( 2, ncol );
for pos = 1:ncol
col = cols(pos);
Ac(:,pos) = A(:,col);
Bc(:,pos) = B(:,col);
end
Ac(:,1)
A(:,cols(1))
Вы генерируете случайный список номеров столбцов от 1 до 1500. И берете ту же позицию из A и B.
Спасибо за ваш вклад. Я давно не использовал Matlab и только что открыл его для Wolfie, поэтому я не удивлен, что мой код не совсем идиоматичен. Постараюсь отредактировать свой пост!
Так что у тебя есть
X = rand(8,1500);
Y = rand(2,1500);
Вы можете создать случайный индекс из 100 столбцов и выбрать его из обеих матриц.
idx = randperm( 1500, 100 );
Xi = X(:,idx);
Yi = Y(:,idx);
Обратите внимание, что я использовал randperm
, чтобы получить 100 столбцов уникальный, то есть без повторов. Если вам нравятся случайные повторы, вы можете заменить randperm(1500,100)
на randi(1500,1,100)
;
Было бы чище использовать
randi
для получения случайных целых чисел в диапазоне, а не для масштабирования значений с плавающей запятой. Точно так же индексирование с помощью массиваcols
, такого какA(:,cols)
, было бы чище (и более идиоматично).