how to get following matrix using bsxfun

2 次查看(过去 30 天)
I have a matrix x=[0 0 0;5 8 0; 7 6 0].
I want a matrix m=[0 0 0; 5 8 0 ; 7 6 0 ; 0 0 8; 5 8 8; 7 6 8; 0 0 16; 5 8 16; 7 6 16] I want that the third column of matrix x gets multiplied each time by 8 while other two columns remain same. I want this to continue until the value in third column reaches 72. how can i do it with bsxfun??

采纳的回答

Geoff Hayes
Geoff Hayes 2015-2-7
Saurabh - if x is your defined as
x=[0 0 0;5 8 0; 7 6 0];
then you could replicate it 10 times as
m = repmat(x,10,1);
then just replace the third column with
m(:,3) = cell2mat(arrayfun(@(u)repmat(u*8,3,1),0:9,'UniformOutput',false)');
to produce the desired result. Try the above and see what happens!
  3 个评论
Ace_ventura
Ace_ventura 2015-2-7
编辑:Ace_ventura 2015-2-7
can it be done using bsxfun?? And what if i wanted to add certain constant to 1 and 2 column as well continuously throughout. Say addition of 5 throughout entire columnn1 and addition of 9 throughout entire column 2 with each repetition of matrix. Thanks in advance:)
Geoff Hayes
Geoff Hayes 2015-2-8
Saurabh - try the following
x=[0 0 0;5 8 0; 7 6 0];
cell2mat(arrayfun(@(u)x + repmat([u*5 u*9 u*8],3,1),0:9, 'UniformOutput',false)')
5, 9, and 8 are added to columns 1, 2, and 3 respectively of each new matrix. We use repmat to create the matrix to add to x at each iteration u. We apply this add using arrayfun for iterations 0 through 9. The result is a cell array, so we transpose the output from arrayfun and convert to a matrix using cell2mat.

请先登录,再进行评论。

更多回答(1 个)

Andrei Bobrov
Andrei Bobrov 2015-2-7
编辑:Andrei Bobrov 2015-2-7
k = 0:72/8;
M = repmat(x,numel(k),1);
add = 8*ones(size(x,1),1)*k;
M(:,3) = add(:);
with bsxfun
m = reshape(bsxfun(@plus,permute(x,[1 3 2]),...
bsxfun(@times,reshape([0 0 1],1,1,[]),0:72/8)),[],3);
  1 个评论
Ace_ventura
Ace_ventura 2015-2-8
Thanks Andrei..Could u also answer my second question. what if i wanted to add a constant to column 1 and column2 with each matrix repetition. That is to say,if my constant to be added is 5 ,then my first column in second repetition of matrix is 5 10 12 and second column becomes 5 13 11. In third repetition first column becomes 10 15 17 and second column becomes 10 18 16 and so on. During this entire process my third column goes on with addition of 8 each time ( as u have answered)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by