How to make a 3D matrix from 3 vectors?

8 次查看(过去 30 天)
3 vectors, a b c, to be used as factor or filter for a 3D matrix V. For 2D it's easy and elegant:
d=a'*b;
f=M.*d; % M 2D matrix
The 3D filter can be done this way:
f=V*0.0;
for n=1:n3
f(:,:,n)=V(:,:,n)*c(n);
end
Is there a more elegant way for this? For example make a 3D matrix D from the 3 vector and then
f=D.*V
Thanks

采纳的回答

Matt J
Matt J 2016-1-13
编辑:Matt J 2016-1-13
For filtering, it is probably not a good idea to convolve with d or D. Instead, you should filter separably. For example, in 2D, you could do,
f = conv2(a,b,M);
For element-wise multiplication in 3D, I similarly don't think building D is the way to go, as it creates an unnecessary extra array. I would probably do,
f=bsxfun(@times,V, a(:)*b(:).');
f=bsxfun(@times,f, reshape(c,1,1,[]));
But, if you really insist on building D, you could do
D = bsxfun(@times, a(:)*b(:).', reshape(c,1,1,[]));
Or, you could do
d=a(:)*b(:).';
D=reshape(d(:)*c(:).', size(V));

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息

产品

Community Treasure Hunt

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

Start Hunting!

Translated by