Scale 3D matrix by 10i

2 次查看(过去 30 天)
Johnny
Johnny 2014-1-26
M = randi([5 10], 1);
N = randi([5 10], 1);
P = randi([20 30], 1);
Y = round(-10 + (10 - (-10)).*rand(M, N, P));
===================================
indexes = 1:P;
scaling = repmat(indexes(:), [M, N, P])
Yscaled = Y.*(scaling.*10)
How I understand this question is that I have to create another 3D matrix and multiple the two (matrix) in order to scale it
How to I create a 3D matric: first page all 1 , second page all 2 , etc up to P

回答(3 个)

Image Analyst
Image Analyst 2014-1-26
编辑:Image Analyst 2014-1-26
Hint:
y=cat(3, ones(2), 2*ones(2), 3*ones(2)) % Sample initial data.
[rows, columns, planes] = size(y)
m = 10*(1:planes)
m2 = imresize(m', [numel(y), 1], 'nearest')
y_out = reshape(.......
Finish the last line by yourself and it will be done. imresize() requires the Image Processing Toolbox. Type ver to see if you have it.

Johnny
Johnny 2014-1-26
编辑:Johnny 2014-1-26
% Create a indexes vector
indexes = 1:P;
% Make indexes array into individual pages
n = reshape(indexes,1,1,P)
% Create a 3-dimensional matrix from indexes vector
m = repmat(n,M,N)
% Elementwise multiplication between matrix m and Y
Yscaled = Y.*(m.*10)

Andrei Bobrov
Andrei Bobrov 2014-1-26
Yscaled = bsxfun(@times,Y,reshape(1:P,1,1,[])*10)

类别

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