【发布时间】:2016-08-28 10:18:03
【问题描述】:
我在 Matlab 中有一个 21x2 的向量,如下所示:
A = [0.5 0.6 0.7 0.8 0.9 1.0 1.1 1.2 1.3 1.4 1.5 1.6 1.7 1.8 1.9 2.0 2.1 2.2 2.3 2.4 2.5;
0 0 0 0 0 1 1 1 1 1 1 0 0 0 0 0 1 1 1 1 1]';
第一行中的每个元素对应于第二行中的0 或1。我需要将0's 和1's 的每一个集合视为块,以便我可以挑选出元素,这样我就有一个包含1 块的所有first 元素的向量然后是另一个包含1 块的所有 second 元素的向量,依此类推,直到我将所有元素分离出来。
所以例如vector1=[1.0 2.1], vector2=[1.1 2.2] 等等等等。
这是因为我需要对块之间的各个点进行平均,这样我就有了例如avg_vector1, avg_vector2, avg_vector3...等。
到目前为止,我一直在尝试编写一个循环来执行此操作,但我已经可以说它不会那么高效并且可能不会每次都有效,因为我必须为每个 j 提供一个 if (见下文)并且“j的数量”并不是真正固定的,有时块可能更长,有时可能更短。
j=1;
for i=1:size(A,1)
if A(i,2)==1
if j==1
vector1(i)=A(i,1);
j=j+1; %j is acting as a counter for the "size" of the block of 0's and 1's
if j==2
vector2(i)=A(i,1);
**incomplete**
有谁知道如何更优雅、更简单地做到这一点?
谢谢
【问题讨论】:
-
向量总是以零开头吗?你知道你将拥有的块数(总是 2 个)吗?
-
是的,每次都以0开头
-
在您的示例中,两个 1 块的大小不同(第一个有 6 个元素,第二个有 5 个)。这是一个错字,还是会发生在您的数据向量中?然后,您不必创建多个向量,因为
mean可以沿给定维度进行操作 -
不,这不是错字,它们的大小不同!
-
那么您如何处理尺寸不同的事实?您是否只从最长的块中获取与最短块中的值一样多的值?
标签: arrays matlab sorting for-loop average