【发布时间】:2015-10-30 18:37:27
【问题描述】:
我有一个名为 A 的 4x5 矩阵,我想从中随机选择 3 行,然后是 4 个随机列,然后选择在这些选定的行和列中重合的元素,这样我就有 12 个选定的元素。然后我想创建一个名为 B 的对角矩阵,它的条目为 1 或 0,以便将 B 矩阵与重构的 A 矩阵 (20x1) 相乘,将为我提供A 中选定的 12 个元素.
如何创建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);
【问题讨论】:
-
@Adriaan yapp 抱歉我编辑了它。
-
你不能有一个对角矩阵来解决这个问题。您可以填充
B的某些值以通过乘法实现您想要的结果,但它肯定不会是对角线。将对角矩阵与向量相乘只会返回该向量的缩放分量......除非您打算在最终向量中用 0 替换那些未选择的值。请澄清您是否真的是指对角矩阵。 -
@rayryeng 我认为他的意思是对角矩阵将有一个
0用于它不应该返回的值和一个1用于它应该返回的值。由于1在B中的1,A*B的结果将是一个具有 12 个非零值的 20 元素向量。抱歉,这可能对您没有帮助,但是对角矩阵可以解决问题,尽管我不知道为什么B不能是向量和使用逐个元素的乘法。 -
@IKavanagh 这是真的,这就是为什么我很困惑......这就是为什么我还没有写一个答案。
-
那么你想要的是
B,其中y3 = A*B和y3 = y2(y2 ~= 0)?这个问题非常不清楚。对于您提供的示例,很确定B不能是对角线。