Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

operation array in cell

Asked by Internazionale on 5 Mar 2013

i have 2 matrix A and B and cell Z with 13*13 blocks. each blocks have 8*8 pixel.

A=rand(13,13,8,8);

B=rand(13,13,8,8);

i want to process value A and B with each blocks in cell Z.

XY = (Z*A)+B

example, value at A if you see at workspace, start with val(:,:,1,1), there's will be 169 value of A. each value will be process with every blocks of Z to get XY. same with matrix B. total blocks of Z is same with total value of A and B in val {:,:,1,1}.

specificly,

XY{1,1}=Z{1,1}.*A{1,1,1,1} + B{1,1,1,1},

XY{1,2}=Z{1,2}.*A{1,2,1,1}+B{1,2,1,1} until the whole blocks of Z.

3 Comments

Jan Simon on 5 Mar 2013

What have you tried so far and which problems occurred?

Internazionale on 5 Mar 2013

i am confuse with for.. i tried this program

A= rand(13,13,8,8);

B= rand(13,13,8,8);

Z= mat2cell(Y, [8 8 8 8 8 8 8 8 8 8 8 8 8] , [8 8 8 8 8 8 8 8 8 8 8 8 8]);

for aa=1:13

for bb=1:13

XY{aa,bb}=z{aa,bb}*A(:,:,1,1)+B(:,:,1,1);

end

end

whn i try this one, matlab error. Error using * Too many input arguments.

Internazionale on 5 Mar 2013

Y is matrix 104*104 and i process mat2cell to get Z.

Internazionale

Products

No products are associated with this question.

1 Answer

Answer by Andrei Bobrov on 5 Mar 2013
Edited by Andrei Bobrov on 5 Mar 2013
A1 = permute(A,[3 4 1 2]);
B1 = permute(B,[3 4 1 2]);
XY = Z;
for ii = 1:size(Z,1)
    for jj = 1:size(Z,2)
        XY{ii,jj} = Z{ii,jj}.*A1(:,:,ii,jj) + B1(:,:,ii,jj);
    end
end 

ADD variant

Zn = cat(3,Z{:});
s = size(A);
A1 = reshape(permute(A,[3 4 1 2]),s(3),s(4),[]);
B1 = reshape(permute(B,[3 4 1 2]),size(A1));
XY = reshape(num2cell(Zn.*A1+B1,[1 2]),size(Z));

7 Comments

Andrei Bobrov on 6 Mar 2013

eg:

A = randi([3 8],[13,13,8,8]);
B = randi([10 20],[13,13,8,8]);
Z = mat2cell(randi(10,104),8*ones(1,13),8*ones(1,13));
A1 = permute(A,[3 4 1 2]);
B1 = permute(B,[3 4 1 2]);
XY = Z;
s = size(Z);
for ii = 1:s(1)
    for jj = 1:s(2)
        XY{ii,jj} = Z{ii,jj}.*A1(:,:,ii,jj) + B1(:,:,ii,jj);
    end
end
Jan Simon on 6 Mar 2013

@Internazionale: It would help, if you post the code you are using and a complete copy of the error message. Andrei hast posted two different solutions, and you could potentially have modified one of them, e.g. by a typo. We cannot reliably guess the cause of the error on your computer, so it is your job to explain the circumstances.

Internazionale on 6 Mar 2013

try to explain, i got an idea but not fully answer. i am still confused because not completed.

A=rand(13,13,8,8);

B=rand(13,13,8,8);

Z=mat2cell(Temp, [16 16 16 16 16 16 16 16 16 16 16 16 16] , ... [16 16 16 16 16 16 16 16 16 16 16 16 16]);

for gg=1:13

for hh=1:13

XY{gg,hh}= (Z{gg,hh}.*A{gg,hh,1,1})+B{gg,hh,1,1};

end

end

this program just for A(:,:,1,1) and B (:,:,1,1). my question, how to use the whole value from A and B. A(:,:,1,1) until A(:,:,8,8) and B(:,:,1,1) until B (:,:,8,8). so we get 64 new cell of XY.

Andrei Bobrov

Contact us