I have a matrix 'm' of oder 4 by6by960. I want to extract 1st and 3rd dimensions, i.e 4by960. how to do this?

1 回表示 (過去 30 日間)
m=rand(4,960);
m = [m; zeros(20,960)];
m=permute(reshape(m, 4,6,960), [1 2 3]); % need this 3d matrix for some operation
m1=squeeze(m(:,6,:));
when i use above line to get my requirement. it returns a matrix m1 of 4by960 with all zero enteries but i need to extract non-zero elements in 4by960 dimensions. kindly help to resolve the issue

採用された回答

Stephan
Stephan 2018 年 12 月 11 日
編集済み: Stephan 2018 年 12 月 11 日
Hi,
all the non-zero elements are in column 1 - not in column 6:
m=rand(4,960);
m = [m; zeros(20,960)];
m=permute(reshape(m, 4,6,960), [1 2 3]); % need this 3d matrix for some operation
m1=squeeze(m(:,1,:));
Sometimes for debugging it is helpful to have a look to the results that your code produces - See here for m after performing the permute and reshape:
val(:,:,1) =
0.5108 0 0 0 0 0
0.5300 0 0 0 0 0
0.1545 0 0 0 0 0
0.2341 0 0 0 0 0
val(:,:,2) =
0.6191 0 0 0 0 0
0.3090 0 0 0 0 0
0.2135 0 0 0 0 0
0.2826 0 0 0 0 0
val(:,:,3) =
0.5438 0 0 0 0 0
0.7191 0 0 0 0 0
0.0393 0 0 0 0 0
0.6480 0 0 0 0 0
You can continue this up to 960 - but the result keeps the same. So now you know the reason for your problem, but what do you want to achieve with permute? Note that:
>> A = [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B = permute(A, [1 2 3])
B =
1 2 3
4 5 6
7 8 9
In other words - your permute does not do anything - if you leave the permute command away the resulting matrix m keeps the same:
m1 = permute(reshape(m, 4,6,960), [1 2 3]);
m2 = reshape(m, 4,6,960);
sum(sum(sum(m1 == m2))) == 4*6*960
ans =
logical
1
This seems to be the original problem you have - your permute call does not change your matrix the way that you expect it to do.
Best regards
Stephan

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeMatrices and Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by