Arrays 如何将Matlab数组划分为不同的区域?

Arrays 如何将Matlab数组划分为不同的区域?,arrays,matlab,Arrays,Matlab,我有一个[1 2 2 3 3 3 1 2 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]. 将一个变量设置为原始数字,使a=array[1],然后测试下一个值是否与上一个值相同,并将一个计数器变量附加到此值。一旦不是,加载到数组B中,更改该变量的值,然后再次执行 使B成为二维数组 或者,查

我有一个
[1 2 2 3 3 3 1 2 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].

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

使B成为二维数组

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

这基本上是,区别在于您希望将向量分解为每个重复值字符串,而不是生成成对的
[value,nRepeats]
。由于重复值的字符串具有不同的长度,因此需要将它们存储在一个数据库中。这里有一种方法,使用和:


这是通过首先使用
diff
计算
A
中的元素差异来实现的。任何有非零结果的地方都表示值的变化,这些非零的索引位置可以通过
find
找到。用0和向量
A
的长度填充端点,然后再次应用
diff
得到每个值字符串的长度。原始的矢量<代码> A<代码>然后使用<代码> MAT2Cys<代码>这些长度被分解成一个单元数组。

中的<代码> 3 < /代码>和<代码> 2 > /代码>发生了什么?你的数组不应该有7个区域吗?是的,我应该划分为7个区域,但是如何划分呢?你要问的是,还有一些其他问题。我读过,但我无法将其应用到我的代码中唯一的技巧是,由于区域的元素数不同,您需要将它们放入单元格数组而不是普通的二维数组。
unique
将不起作用,至少不会直接起作用,因为同一个数组可能会有不同的运行value@zahra:现在清楚了吗?
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);