每次迭代乘以随机数

时间:2012-01-13 10:07:32

标签: matlab

我想将随机数向量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倍。我觉得这很正常,但为什么会有很大差异?

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