我想将随机数向量PT(n)=rand(1,n)
乘以矩阵M(mxn)
,但希望每列乘法都有不同的随机向量。在Matlab中可以吗?
E.g。 PT=rand(1,4);
`PT*(1 0 0 0;...
0 0 0 1;...
0 1 0 0;...
0 0 0 1);
但是每个列乘法的PT都会改变。我能想到的唯一方法是制作PT=rand(4,4)
,然后选择diag(PT*M)
,但如果我的矩阵M很大,则价格非常昂贵。
有什么想法吗?
干杯
Suplemental 使用@Nasser arrayfun代码比for循环长3倍。我觉得这很正常,但为什么会有很大差异?
答案 0 :(得分:1)
我不确定我是否完全理解你的要求。
但是如果你的意思是你有一个向量矩阵,并且你想用这些向量中的每一个乘以另一个矩阵,那么一种方法是使用arrayfun
。
例如:这里我们将5乘4的矩阵与3个向量相乘,每个为4乘1。
结果是3个载体,每个载体是5乘1
pt = rand(4,3);
M = rand(5,4);
r = arrayfun(@(i) M*pt(:,i),1:size(pt,2),'UniformOutput',false)
给出
r =
[5x1 double] [5x1 double] [5x1 double]
cell2mat(r)
ans =
0.1463 0.4386 0.4638
0.4104 0.8105 0.6455
0.9503 1.0145 1.0369
1.3011 1.4583 1.5233
0.4688 0.7405 0.7492
答案 1 :(得分:0)
我不确定,但根据你的例子,看起来你想要对PT的列进行随机排列。如果是这种情况,你可以这样做:
PT=PT(:,randperm(size(PT,2)));
答案 2 :(得分:0)
如果我跟着你,那怎么样
M = rand(4,4); % your matrix
PT = rand(4,4); % your random row vectors
rslt = sum(PT'.*M,2); % your desired result