Squeeze函数
一.Matlab 官方help(看不懂官方的没关系,后面我会通俗点讲):
squeeze Remove singleton dimensions.
B = squeeze(A) returns an array B with the same elements as
A but with all the singleton dimensions removed. A singleton
is a dimension such that size(A,dim)==1. 2-D arrays are
unaffected by squeeze so that row vectors remain rows.
For example,
squeeze(rand(2,1,3))
is 2-by-3.
See also shiftdim.Reference page for squeeze
Other functions named squeeze
二.通俗易懂点讲
作用:删除单一维度,矩阵压缩,其实就是删除这些单一维度,可以这样理解,一个2*3*4*1*5*1*6(7维)这种维度数组表示的元素数量和2*3*4*5*6(5维)数组一样,那我为啥要用7维的?我同样可以用剩下维度的索引唯一标识数据,并且还降低了维度。
语法:
B = squeeze(A)
解释:B = squeeze(A) 返回元素与 A 相同但删除了所有单一维度的数组 B。单一维度是指 size(A,dim) = 1 的任意维度。二维数组不受 squeeze 的影响;如果 A 是一个行或列向量或者标量 1×1 值,则 B = A。
简单来说就是在矩阵中若某一个维度是1,其实我们可以将此矩阵压缩,比方说一个2(行)*1(列)*3的数组,因为列是单一维度,这种数组我们完全没有必要为存3个2行*1列的数据多开一个维度,类似3维数组,其实只需要一个大小为2*3的二维数组完全可以储存。
demo:
A=rand(2,1,3); %类似一个三维数组,每一维大小分别是3,2,1
B=squeeze(A); %压缩数组,因为你像既然最后一个维度是1,我为啥不直接并到上一维去呢
%比如说a(1,1,1)=1 a(1,2,1)=2,你会发现用a(1,1)和a(1,2)同样能唯一索引到1和2
%所以之前的很重复>> A
A(:,:,1) =
0.7343
0.4680
A(:,:,2) =0.8960
0.7297
A(:,:,3) =0.0165
0.2248>> B
B =
0.7343 0.8960 0.0165
0.4680 0.7297 0.2248