# square root of sum of squares on portions of cell arrays - Matlab Noob

조회 수: 6 (최근 30일)
Mark . 2013년 3월 28일
I have a cell array, out5, with a single column of 2x1 vectors. I would like to take the square root of the sum of the squares of the two values in each vector for each of these vectors. I was looking at doing some code similar to this:
cellfun(@hypot,out5)
where,
out5 =
[0;0]
[0;-162]
[-54;72]
...
I would desire the output to be:
out6 = [sqrt(0^2 + 0^2) ; sqrt(0^2 + (-162)^2) ; sqrt((-54)^2 + 72^2) ; ... ]
I would also like the values to be either positive or negative depending on the first values in the vectors of out5. so for instance, the third vector in the cell array out5 [-54;72] the value output would be a negative since the first value is negative. In this example the final result would be:
[0 ; 162 ; -90]
##### 댓글 수: 3이전 댓글 1개 표시이전 댓글 1개 숨기기
Mark 2013년 3월 28일
You're exactly right, but I want the value to be either positive or negative depending on whether or not the value of the first term is positive or negative.
Siddharth Pande 2013년 3월 28일
what is your cell an image for example if you are using a image in grey scale the piccture image quality is defined on 100 for white and 0 for black what i mean to say the darkest of the darkest image will also be a positve one so you define your image in positive range

댓글을 달려면 로그인하십시오.

### 채택된 답변

Sven 2013년 3월 28일
편집: Sven 님. 2013년 3월 28일
out5 = {[0;0],[0;-162],[-54;72]}
cellfun(@(vec)hypot(vec)*((-2*double(vec(1)<0))+1),out5)
or
cellfun(@(vec)sqrt(sum(vec.^2))*((-2*double(vec(1)<0))+1),out5)
ans =
0 162 -90
The bit at the end: ((-2*double(vec(1)<0))+1)
Will return 1 for a positive (or zero), and -1 for a negative. The sign() function almost does that, but it returns zero for zero, which isn't quite what you want.
##### 댓글 수: 4이전 댓글 2개 표시이전 댓글 2개 숨기기
Mark 2013년 3월 28일
Ah yes, thanks so much for the help! I have to say this community is one of the most helpful on the web. It was the sign() function issue. I'll have to have a look at a video tutorial if I can find one on the cellfun() and arrayfun() operations as the matlab help function browser wasn't clear enough for me.
Sven 2013년 3월 28일
Mark, the best way to think of cellfun/arrayfun is this:
1. Pretend you've got a variable (or variables) with names in the @(name1,name2) part.
2. Write a 1-line command that you would do with that/those variables
So in my example I've got cellfun(@( vec )... This means I just have to write something that refers to some variable called vec, and it will actually be the contents of the cell I'm giving. It's basically equivalent to:
for i=1:numel(out5)
vec = out5{i};
% Now I need to do something with *vec*
end

댓글을 달려면 로그인하십시오.

### 카테고리

Help CenterFile Exchange에서 Cell Arrays에 대해 자세히 알아보기

### Community Treasure Hunt

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

Start Hunting!

Translated by