【问题标题】:how can I divide a Matlab array to different regions?如何将 Matlab 数组划分为不同的区域?
【发布时间】:2019-08-21 18:48:17
【问题描述】:

我有一个[1 1 1 1 2 2 2 3 2 3 3 3 1 1 2 2 ] 数组。如何将它划分为在 Matlab 中的一个数组中显示相同数字的范围?我想制作矩阵B,即:

B(1) = [1 1 1 1]; 
B(2) = [2 2 2] ; 
B(3)= [3 3 3];
B(4) = [1 1];
B(5) = [2 2].

【问题讨论】:

  • 中间的32怎么了?你的数组不应该有 7 个区域吗?
  • 是的,我应该划分为 7 个区域,但是如何划分?
  • 您要问的是run length encoding,还有一些其他问题。
  • 我已阅读但无法应用到我的代码

标签: arrays matlab


【解决方案1】:

这基本上是run-length encoding,不同之处在于您希望将向量分解为每个重复值的字符串,而不是生成成对的[value, nRepeats] as is typically desired。由于您的重复值字符串具有不同的长度,因此您需要将它们存储在cell array 中。这是一种方法,使用difffindmat2cell

A = [1 1 1 1 2 2 2 3 2 3 3 3 1 1 2 2];
nReps = diff([0 find(diff(A)) numel(A)]);
B = mat2cell(A, 1, nReps);

首先计算Adiff 中的元素差异。任何有非零结果的地方都表示值的变化,这些非零的索引位置用find 找到。用 0 填充末端和向量 A 的长度并再次应用 diff 给我们每个值字符串的长度。然后使用 mat2cell 和这些长度将原始向量 A 分解为一个元胞数组。

【讨论】:

  • @zahra:现在更清楚了吗?
【解决方案2】:

设置一个变量为原始数字,所以a = array[1],然后测试下一个值是否与上一个相同,附加一个计数器变量。一旦不是,加载到数组 B,并更改该变量的值并再次执行。

使 B 成为二维数组

或者,查看matlab的unqie函数,用索引填充B。

【讨论】:

  • 唯一的诀窍是,由于这些区域有不同数量的元素,您需要将它们放入元胞数组而不是普通的二维数组。
  • unique 不会起作用,至少不会直接起作用,因为可能有相同值的不同运行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-11-06
  • 2021-01-21
  • 1970-01-01
相关资源
最近更新 更多