【问题标题】:Squeeze Some of Singleton Dimensions in Matlab在 Matlab 中挤压一些单例维度
【发布时间】:2014-05-16 19:45:17
【问题描述】:

如何在 Matlab 中仅压缩矩阵的单个维度的子集?挤压功能将它们全部移除。

我将这些维度的索引保存在一个名为“dims”的向量中。

【问题讨论】:

  • @Luis 删除标签 - singleton 是个好主意,因为这主要基于那种标签?
  • @Divakar 该标签的定义说“单例是一种设计模式,用于确保特定类的一个应用程序范围的实例存在”。所以很明显它指的是单例的OOP概念,而不是单例维度。但您可能是对的:当标签的名称确实适用于答案时,根据其定义删除标签是否正确?如果您认为合适,请随时回滚我的编辑
  • @LuisMendo 我对此并不太挑剔。没关系,因为现在我想给出定义。感谢您提出定义文本!
  • 供将来参考:删除似乎是最好的操作,according to Meta@Divakar
  • @LuisMendo 我想不为这个问题添加该标签是有意义的。同样为这个专门的标签创建一个新标签还没有意义。感谢您与这些元人员核对的努力。

标签: arrays matlab matrix multidimensional-array


【解决方案1】:

在 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)])

【讨论】:

    【解决方案2】:

    代码

    %// 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)])))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-27
      • 2016-04-26
      • 2019-12-16
      • 2021-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多