У меня есть матрица 4x5
с именем A
, из которой я хочу выбрать случайным образом 3 строки, затем 4 случайных столбца, а затем выбрать те элементы, которые совпадают в этих выбранных строках и столбцах, чтобы у меня было 12 выбранных элементов. Затем я хочу создать диагональную матрицу называется B
, в котором будут записи либо 1, либо 0, так что умножение этой матрицы B
на измененную матрицу A
(20x1
) даст мне эти выбранные 12 элементов A
.
Как я могу создать эту матрицу B
? Вот мой код:
A=1:20;
A=reshape(A,4,5);
Mr=4;
Ma=3;
Na=4;
Nr=5;
M=Ma*Mr;
[S1,S2]=size(A);
N=S1*S2;
y2=zeros(size(A));
k1=randperm(S1);
k1=k1(1:Ma);
k2=randperm(S2);
k2=k2(1:Mr);
y2(k1,k2)=A(k1,k2);
B
, чтобы добиться желаемого с помощью умножения, но оно, конечно, не будет диагональным. Умножение диагональной матрицы на вектор просто вернет масштабированные компоненты этого вектора... если только вы не намерены заменить те значения, которые не выбраны, на 0 в конечном векторе. Пожалуйста, уточните, действительно ли вы имеете в виду диагональную матрицу. - person rayryeng   schedule 30.10.20150
для значений, которые она не должна возвращать, и1
для значений, которые она должна возвращать. РезультатомA*B
будет вектор из 20 элементов с 12 ненулевыми значениями из-за1
вB
. Извините, что, вероятно, вам не поможет, но диагональная матрица решит проблему, хотя я не знаю, почемуB
не может быть векторным и поэлементным умножением. - person IKavanagh   schedule 30.10.2015bsxfun
, и мне показалось, что это хорошее место, чтобы его применить! - person IKavanagh   schedule 30.10.2015B
, гдеy3 = A*B
иy3 = y2(y2 ~= 0)
? Этот вопрос очень неясен. Почти уверен, чтоB
не может быть диагональным для приведенного вами примера. - person Matt   schedule 30.10.2015idx = reshape(y2 ~= 0, numel(y2), [])
. ЗатемA(idx)
даст вам то, что вы хотите. Диагональ не нужна. Я запустил твой код. Ваше желаниеB
бесполезно. Есть лучшие способы сделать это. - person Matt   schedule 30.10.2015