在不使用循环的情况下替换向量的矩阵行

时间:2016-09-19 23:02:30

标签: arrays matlab indexing

是否可以在不使用MATLAB循环的情况下替换特定向量的矩阵的某些行(在我的情况下,是随机向量)?

假设:

A = [1 2 3; 
     4 5 6; 
     7 8 9; 
     10 11 12]

我想将A([2 3],:)替换为v = rand(1,3),但我真的希望随机生成A的每个选定行(在本例中为2和3)。

这个问题是我想要概括它为每个给定的矩阵A而不使用MATLAB中的循环。有可能吗?

谢谢。
Rui Semeano

2 个答案:

答案 0 :(得分:3)

怎么样:

A([2 3],:) = rand(2,size(A,2));

您可以A获取size(A,2)中的列数,然后创建一个具有所需大小的随机矩阵,并将其分配给A

如果您还想随机选择行,那么对于N行,您可以写:

N = 2;
randRows = randperm(size(A,1),N);
A(randRows,:) = rand(N,size(A,2))

P.S - 如果要随机化整数,请使用randi

答案 1 :(得分:0)

听起来你想随机生成[2,3]?我不确定所以我只是详细地命名所有内容并使所有内容随机。

MinimumInteger = 1;
MaximumInteger = 12;
NumberOfRows = 4;
NumberOfColums = 3;

A = randi([MinimumInteger, MaximumInteger], NumberOfRows, NumberOfColums);

NumberOfRowsToChange = randi([0, NumberOfRows]);

RowsToChange = randperm(NumberOfRows, NumberOfRowsToChange);

A(RowsToChange, :) = randi([MinimumInteger, MaximumInteger], NumberOfRowsToChange, NumberOfColums);