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

1 次查看(过去 30 天)
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.

采纳的回答

Raj
Raj 2019-9-10
编辑:Raj 2019-9-10
"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 个评论
Raj
Raj 2019-9-10
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.

请先登录,再进行评论。

更多回答(0 个)

Community Treasure Hunt

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

Start Hunting!

Translated by