【问题标题】:MATLAB: Compare matrices built with repelem and repmatMATLAB:比较使用 repelem 和 repmat 构建的矩阵
【发布时间】:2017-08-05 10:21:57
【问题描述】:

我有一个大小为 ZxW 的数组。

Z = 20;
W = 30;
A = 40; %will be used below
size(a)
20      30

然后我应用了两个不同的转换,然后我删除了一个并且我无法返回它。

第一次转换:

b = repelem(a(:,1),A,A);

第二次改造:

c = repmat(a,[1,1,A,A]);
d = c(:,1,:,:);

在这些转换和删除 a(不能用于以下)之后,我想比较 d 和 b 使用

assert( isequal(b,f) )

其中 f 是 d 的转换,它使断言为真。

我的第一个想法是简单的重塑:

f = reshape(squeeze(d),[Z*A,A]);

这不能作为 repelem 和 repmat 以不同的方式移动条目。我该怎么做?

感谢您的关注。

真诚的

卢卡

编辑:更改

c = repmat(a,[A,A]);

c = repmat(a,[1,1,A,A]);

【问题讨论】:

  • 以后您可以编辑您的帖子进行更正,而不是删除和重新发布。我在这里重新发布我添加到原始帖子的答案。
  • 顺便说一句,因为c 是一个二维数组(a 是一个二维数组),你可以只拥有d = c(:, 1)
  • 谢谢@crazyGamer,以后我会记住的。
  • 当然:)。另外,我的解决方案有效吗?还是您期待别的东西?
  • 更改后的文本答案与您的不同;幸运的是,Jan Simon 也提供了帮助。感谢@crazyGamer 抽出宝贵时间。

标签: matlab reshape


【解决方案1】:

答案(Jan Simon)是:

f = reshape(permute(d, [3,1,4,2]), [Z*A,A]);
isequal(b, f)    % 1: equal

感谢您的帮助。

卢卡

【讨论】:

    【解决方案2】:

    注意:此解决方案已被编辑的问题所淘汰,请参阅发布的其他解决方案。

    仔细看看bd的模式是什么:

    b = [1 1 1 2 2 2 3 3 3].'
    d = [1 2 3 1 2 3 1 2 3].'
    

    因此,f 的转换可以是:

    f = reshape(d, [A, A]).'
    f = f(:)
    

    这会将d 完全转换为b,反之亦然。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 2015-06-25
      • 2017-08-24
      • 1970-01-01
      • 2017-10-27
      • 1970-01-01
      • 2015-12-24
      相关资源
      最近更新 更多