How does Squeeze work?
59 次查看(过去 30 天)
显示 更早的评论
采纳的回答
Matt Fig
2011-5-1
In addition to what James said, just look at an example or two. Look what happens to the dimensions of A with squeeze, particularly what happens to the dimension with the 1 (so-called singleton dimensions).
A = rand(6,7,1,2); % size(A) = [6 7 1 2]
size(squeeze(A))
A = rand(1,6,7,2);
size(squeeze(A))
A = rand(6,7,1,2);
size(squeeze(A))
Now try it with two (or more) 1 (singleton) dimensions.
A = rand(6,7,1,2,1,7); % size(A) = [6 7 1 2 1 7]
size(squeeze(A))
A = rand(1,6,1,7,2,1,8); % size(A) = [1 6 1 7 2 1 8]
size(squeeze(A))
A = rand(6,1,7,1,2);
size(squeeze(A))
I think you see the pattern. Now that you see what is going on with the dimensions, look at the data (using simpler examples):
A = reshape(randperm(6),2,1,3) % Look at this data
squeeze(A) % Now look at it.
A = reshape(randperm(6),1,2,3)
squeeze(A)
So wee see that SQUEEZE reads off the columns of A while creating an array with no singleton dimensions.
6 个评论
Swati Sarangi
2020-11-19
Hi ,
@Matt Fig,
I'm getting an error in line 2 of the following code snippet while trying to implement it in my MATLAB.
A = rand(6,7,1,2); % size(A) = [6 7 1 2]
size(squeeze(A))
A = rand(1,6,7,2);
size(squeeze(A))
A = rand(6,7,1,2);
size(squeeze(A))
Stephen23
2020-11-19
编辑:Stephen23
2020-11-19
@Swati: your code works without error:
A = rand(6,7,1,2); % size(A) = [6 7 1 2]
size(squeeze(A))
A = rand(1,6,7,2);
size(squeeze(A))
A = rand(6,7,1,2);
size(squeeze(A))
If you are getting an error then please show us the complete error message. This means all of the red text.
更多回答(1 个)
James Tursa
2011-5-1
The squeeze function is similar to reshape in that it changes the dimensions of a variable without moving any of the data in memory. The total number of elements and their ordering in memory remain the same. For squeeze, the new dimensions are simply the old dimensions with all singleton (==1) dimensions removed (except 2D inputs are left as is).
As for what it is used for, it may be that the result of some algorithm has left you with a 1x2x1x3 matrix and you need to feed that to a function that needs a 2D input. So you could use squeeze on it to get the 2D input as a 2x3 matrix.
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!