【问题标题】:Reshape MATLAB matrix with repeated indicies使用重复索引重塑 MATLAB 矩阵
【发布时间】:2016-06-30 23:05:54
【问题描述】:

如果这是一个重复的问题,我深表歉意。

假设我有一个矩阵 A

0 1 2 3 4 5 6 7
8 9 1 2 3 4 5 6

和一个向量 b [1,2,3,4,1,2,3,4]。因此,矩阵A 包含基于向量b 的多个有序测量。

如何将矩阵重塑为具有维度[2 2 4],例如A(:,:,1) = [0,4;8,3]

我知道我需要reshape。我尝试使用permute,但是它不能处理重复的索引。

谢谢!

【问题讨论】:

  • 输出和b有什么关系?
  • 您是在寻找任意 b 的通用解决方案,还是 b 始终是上述模式?对于以后更简单的解决方案是可能的。
  • 矩阵A是b给定的channels对应的数据。实际的矩阵要大得多,b 的范围是 1-6。我需要按问题中提到的渠道将数据分开。
  • 我正在考虑使用 A(:) 和 repmat b 向量以适当地匹配(两列),然后使用 sort 按第二列排序,但这听起来效率低下。 . .
  • 为什么会有人反对这个。这些论坛有时让我难以置信。 . .我什至不能删除我自己的帖子(显然人们认为它没有帮助)。

标签: matlab sorting reshape


【解决方案1】:

你已经接近了,你只需要在重塑之前对列进行排序

A=[0 1 2 3 4 5 6 7; 8 9 1 2 3 4 5 6]

%A =
%     0     1     2     3     4     5     6     7
%     8     9     1     2     3     4     5     6

b=[1,2,3,4,1,2,3,4]

%b =
%     1     2     3     4     1     2     3     4 

[~,idx]=sort(b)

%idx =
%     1     5     2     6     3     7     4     8

A=A(:,idx)

%A =
%     0     4     1     5     2     6     3     7
%     8     3     9     4     1     5     2     6

A=reshape(A,[2,2,4])

%A(:,:,1) =
%     0     4
%     8     3

%A(:,:,2) =
%     1     5
%     9     4

%A(:,:,3) =
%     2     6
%     1     5

%A(:,:,4) =
%     3     7
%     2     6

请注意,这只有在您能确保b 中的每个数字重复相同次数的情况下才有效。

【讨论】:

  • 这是什么魔法!?这太好了,非常感谢!正是我想要的。
【解决方案2】:

假设你的 b 总是一些重复的 1:n 模式,就像你的问题一样,你可以使用:

p=4 % number of indices
permute(reshape(A,size(A,1),p,[]),[1,3,2])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-25
    • 1970-01-01
    相关资源
    最近更新 更多