【问题标题】:Is it possible to rotate a matrix by 45 degrees in matlab是否可以在matlab中将矩阵旋转45度
【发布时间】:2013-12-04 16:24:26
【问题描述】:

即使它看起来像钻石。 (它是一个方阵),每一行的元素比前一行多 1 个元素,直到中间行的元素数量等于原始矩阵的维度,然后每行又回到 1?

【问题讨论】:

  • 您是在询问将矩阵可视化为菱形吗?
  • Matrix = imrotate(Matrix,45); 带有图像处理工具箱?
  • 这更多的是用strfind解决一个wordsearch。向前很容易,我使用 fliplr 向后和 ' 向上和向下。但是除了将它旋转 45 度然后向前、向后、向上和向下做之外,我看不到任何做 4 个对角线的方法?
  • @AlexandreBizeau 这将插入可能不是 OP 想要的值。
  • 可能是spdiags?

标签: matlab matrix orientation


【解决方案1】:

旋转当然是不可能的,因为矩阵所基于的“网格”是规则的。

但我记得你最初的想法是什么,所以以下内容会对你有所帮助:

%example data
A = magic(5);

A =

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

d = length(A)-1;
diamond = zeros(2*d+1);

for jj = d:-2:-d

    ii = (d-jj)/2+1;
    kk = (d-abs(jj))/2;

    D{ii} = { [zeros( 1,kk ) A(ii,:) zeros( 1,kk ) ] };
    diamond = diamond + diag(D{ii}{1},jj);
end

将归还钻石:

diamond =

     0     0     0     0    17     0     0     0     0
     0     0     0    23     0    24     0     0     0
     0     0     4     0     5     0     1     0     0
     0    10     0     6     0     7     0     8     0
    11     0    12     0    13     0    14     0    15
     0    18     0    19     0    20     0    16     0
     0     0    25     0    21     0    22     0     0
     0     0     0     2     0     3     0     0     0
     0     0     0     0     9     0     0     0     0

现在您可以再次逐行或逐列搜索单词或模式,只需删除零即可:

假设您提取了一行:

row = diamond(5,:)

你可以用find提取非零元素:

rowNoZeros = row( find(row) )

rowNoZeros =

    11    12    13    14    15

不是真正的钻石,但也可能有用:

(@beaker 在 cmets 中的想法。如果他自己发布,我将删除这部分。)

B = spdiags(A)

B =

    11    10     4    23    17     0     0     0     0
     0    18    12     6     5    24     0     0     0
     0     0    25    19    13     7     1     0     0
     0     0     0     2    21    20    14     8     0
     0     0     0     0     9     3    22    16    15

【讨论】:

  • 非常感谢。虽然还有一个问题,但我如何删除/不计算零?
  • 很高兴能帮上忙!接受答案将使人们继续这样做;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多