MATLAB Answers

could anyone help me to solve the issue in the following code

2 views (last 30 days)
jaah navi
jaah navi on 10 Sep 2019
Commented: jaah navi on 10 Sep 2019
code:
a=[0.0022;
0.0922;
0.0146;
0.2549];
[m,n]=size(a);
differences = bsxfun(@minus,reshape(a,m,1,n),reshape(a,1,m,n));
v = nonzeros(differences');
newmat = reshape(v,3,4)';
val = max(newmat');
V=val';
the above code executes and gives me the result.
but when i run the code below
a=[0.0022 0.0021;
0.0922 0.0938;
0.0146 0.0143;
0.2549 0.2509];
[m,n]=size(a);
differences = bsxfun(@minus,reshape(a,m,1,n),reshape(a,1,m,n))
v = nonzeros(differences');
newmat = reshape(v,3,4)'
val = max(newmat')
V=val'
I am error stating Error using '
Transpose on ND array is not defined. Use PERMUTE instead.
Error in (line 20)
v = nonzeros(differences');
Could anyone please help me on it.

  2 Comments

jaah navi
jaah navi on 10 Sep 2019
V=[ -0.0124 0.0122;
0.0900 0.0917;
0.0124 0.0122;
0.2527 0.2488]
This was the result with respect to matrix size of (4,2)

Sign in to comment.

Accepted Answer

Raj
Raj on 10 Sep 2019
Edited: Raj on 10 Sep 2019
"Could anyone please help me on it" - You have not exactly mentioned what help are you looking for. Your error message is self explanatory. In first case, the differences is a 4x4 2D matrix and transpose works on that. In second case, the differences is a 3D matrix with dimensions as 4x4x2 so transpose will not work here and you have to use 'permute'. If how to use permute is your doubt then see details here. Any other specific issues here?
Use this for your desired result:
a=[0.0022 0.0021;
0.0922 0.0938;
0.0146 0.0143;
0.2549 0.2509];
[m,n]=size(a);
differences = bsxfun(@minus,reshape(a,m,1,n),reshape(a,1,m,n))
v1 = nonzeros(differences(:,:,1)');
v2 = nonzeros(differences(:,:,2)');
newmat1 = reshape(v1,3,4)'
newmat2 = reshape(v2,3,4)'
val = [max(newmat1');max(newmat2')]
V=[val']

  3 Comments

jaah navi
jaah navi on 10 Sep 2019
It works.But if the matrix contains 100 number of columns then does the command line v1 = nonzeros(differences(:,:,1)'); needs to be repeated 100 times in the following manner
..
..
..
..
v100= nonzeros(differences(:,:,100)');
Raj
Raj on 10 Sep 2019
In case of large number of columns, you can define some cell arrays and loops like this:
a=[0.0022 0.0021;
0.0922 0.0938;
0.0146 0.0143;
0.2549 0.2509];
[m,n]=size(a);
differences = bsxfun(@minus,reshape(a,m,1,n),reshape(a,1,m,n))
v=cell(1,n);
for ii=1:n
v(1,ii) = {nonzeros(differences(:,:,ii)')};
end
newmat=cell(1,n);
for ii=1:n
newmat(1,ii) = {reshape(cell2mat(v(1,ii)),3,4)'};
end
val=max((cell2mat(newmat(1,1)))');
for ii=2:n
val = [val ;max((cell2mat(newmat(1,ii)))')];
end
V=[val']
This may not be the best way but it'll work.

Sign in to comment.

More Answers (0)

Sign in to answer this question.