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??
0 个评论
采纳的回答
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 个评论
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
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);
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Matrix Indexing 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!