【问题标题】:How to put 1st dimension along 3rd in Matlab?如何在Matlab中将第一个维度放在第三个维度上?
【发布时间】:2015-01-05 10:05:49
【问题描述】:

假设我有一个矩阵

A=[1 2 3]

这是行矩阵。不是我想做“页面”矩阵,即沿第三维对齐元素。

我注意到,以下

A=permute(A,[3 1 2])

有效,而以下

A=permute(A,[3 2 1])

没有。

为什么?

【问题讨论】:

  • 它对我有用,因为它不会引发错误。 “不工作”是什么意思?
  • 提醒一下:如果您认为其中一个答案适合您的问题,请选择它,或者至少投赞成票。对我们中的一些人来说,积分很重要——因为这给了他们“预算”来解决难题,而积分是网站支付的“货币”。

标签: matlab reshape


【解决方案1】:

你的问题不是很清楚。如果我是对的,您希望您的矩阵变为 B = [0,0,1;0,0,2; 0,0,3]。

这可以通过输入转置函数轻松完成:

 B(:,:,3)=A' 

而不是使用作为转置泛化的置换函数。此外,您的操作可能无法“工作”,因为 permute 是一种影响数组维度而不是其元素维度的操作

【讨论】:

  • 1. B(:,:,3)=A' 的结果不是 B = [0,0,1;0,0,2; 0,0,3]。 2.我不认为OP想要的结果。 3.转置最好使用A.'。这将给出正确的结果:B(1,1,:) = A。干杯 =)
【解决方案2】:

注意A 的大小是[1 3],而不是[3 1]。正如 CST-Link 指出的那样,这与 [1 3 1 1] 等是等价的,因为删除了单一维度。

size(A,1) = 1
size(A,2) = 3   <-- You want this to be the third dimension
size(A,3) = 1

现在,您要做的是将第二维度(告诉您有多少列的维度)与第三维度(告诉您有多少切片的维度)对齐。

当您使用permute 时,您可以指定希望原始维度出现的顺序。 IE。如果您对矢量执行permute(A, [2 1]),您将转置它。第二个维度现在是第一个维度,反之亦然。您希望第二个维度是第三个维度,并保持第一个维度不变,所以:

permute(A, [1 3 2])

如果你这样做:

permute(A, [3 2 1])

您将把第三个维度作为第一个 (size(A,1) = 1),第二个维度 (size(A,2) = 3) 将是第二个(即它没有改变),第一个维度是第三个。因此,唯一改变的维度是第一和第三。这些都是一开始的,所以没有任何改变。

请注意,在这种特殊情况下,您也可以使用 shiftdim

shiftdim(A,-1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-04
    • 1970-01-01
    • 2020-07-23
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-17
    相关资源
    最近更新 更多