Умножьте на случайное число каждую итерацию - PullRequest
0 голосов
/ 13 января 2012

Я бы хотел умножить вектор случайного числа PT(n)=rand(1,n) на матрицу M(mxn), но хотел бы иметь другой случайный вектор для каждого умножения столбца. Возможно ли это в Matlab?

например. 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), но это очень дорого, если моя матрица М большая.
Есть мысли?

Приветствия

Suplemental использование кода @Nasser arrayfun занимает в 3 раза больше времени, чем цикл for. Я вижу это нормально, но почему большая разница?

Ответы [ 3 ]

1 голос
/ 13 января 2012

Я не уверен, правильно ли я понял, о чем вы спрашиваете.

Но если вы имеете в виду, что у вас есть матрица векторов, и вы хотите умножить другую матрицу на каждый из этих векторов, то одним из способов является использование 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
0 голосов
/ 14 января 2012

Если я следую за тобой, как насчет

M = rand(4,4);     % your matrix
PT = rand(4,4);    % your random row vectors
rslt = sum(PT'.*M,2); % your desired result
0 голосов
/ 13 января 2012

Я не уверен, но согласно вашему примеру, похоже, что вы хотите сделать случайную перестановку столбцов PT.Если это так, вы можете сделать:

PT=PT(:,randperm(size(PT,2)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...