Arrays 在Matlab中压缩一些单体维数
如何在Matlab中仅压缩矩阵的一个子集?“挤压”功能会将它们全部移除Arrays 在Matlab中压缩一些单体维数,arrays,matlab,matrix,multidimensional-array,Arrays,Matlab,Matrix,Multidimensional Array,如何在Matlab中仅压缩矩阵的一个子集?“挤压”功能会将它们全部移除 我将这些维度的索引保存在一个称为“dims”的向量中。在Matlab中,没有尾随单态维度。n*m*1矩阵自动成为n*m矩阵。知道了这一点,你的问题就可以解决了,尽管你不想结束: X=ones(2,1,2,1,2,1,2,1,2,1) %dimensions you want to keep in any case dims=[2:4]; %Notice, S is [2,1,2,1,2,1,2,1,2], last dime
我将这些维度的索引保存在一个称为“dims”的向量中。在Matlab中,没有尾随单态维度。n*m*1矩阵自动成为n*m矩阵。知道了这一点,你的问题就可以解决了,尽管你不想结束:
X=ones(2,1,2,1,2,1,2,1,2,1)
%dimensions you want to keep in any case
dims=[2:4];
%Notice, S is [2,1,2,1,2,1,2,1,2], last dimension already "gone"
S=size(X)
%keep if size>1
dimensions_to_keep=S>1
%and keep if in "dims" list
dimensions_to_keep(dims)=1
%now permute dimensions you don't want to the end
Y=permute(X,[find(dimensions_to_keep),find(~dimensions_to_keep)])
代码
%// Input matrix is assumed as A
sz = size(A)
t2 = sz~=1
t2(dims)=1
out = reshape(A,sz(t2)) %// out is the desired output
如果你对密集代码很着迷,你可以试试这个-
sz = size(A)
out = reshape(A,sz(sort([dims find(sz~=1)])))
@Luis删除了标记-
singleton
这是个好主意,因为这主要是基于那种标记?@Divakar,标记的定义是“singleton是一种设计模式,用于确保特定类的一个应用程序范围的实例存在”。所以很明显,它指的是单例的OOP概念,而不是单例维度。但你可能是对的:当标签的名称确实适用于答案时,根据其定义删除标签是否正确?如果您找到我的编辑,请随时回滚appropriate@LuisMendo我对它不太挑剔。根据定义,现在没关系了。不过,感谢您打开定义文本!供将来参考:移除似乎是最好的操作@Divakar@LuisMendo我想不为这个问题加上这个标签是有道理的。另外,为这个专门的标签创建一个新标签也没有意义。谢谢你在检查这些元的努力。