arrays - 根据条件在数组/向量中添加单元格 - Matlab

标签 arrays matlab sorting add

我有一个数据向量 448X2,其中第一列对应于距离(从 -50 到 224),第二列包含与每个距离关联的强度。

无论方向(正/负)如何,我都需要添加距离上的所有强度。例如,我想添加 1 的间隔。因此,如果在 [-1 1] 距离范围内有 5 个值,我需要添加它们的所有强度。然后,从 [-2 -1] & [1 2] 距离等等,等等,...

我首先将数据从 0 缩短到 224

datasort = sortrows(abs(data));

它取走了负数。现在我的数据是按距离升序排列的,我不知道如何在距离间隔内添加强度。

这些是我的 datasort 向量的前 10 行:

0.119865417480469   0.0115106217563152
0.669918060302734   0.356697350740433
0.909893035888672   0.659623980522156
1.45951080322266    1.69302666187286
1.70020294189453    2.30387997627258
2.24539566040039    3.98834538459778
2.49082183837891    4.94714736938477
3.02403259277344    7.16749382019043
3.28177261352539    8.59203147888184
3.79549789428711    11.1872768402100

我想以这样的方式结束:

1   1.02780000000000
2   3.99690000000000
3   8.93550000000000
4   26.9468000000000

其中第一列现在包含 1-224 (1:224) 的离散距离值,第二列包含距离范围内所有强度的总和。

希望我说得足够清楚。谢谢

更新:

我想我可以做到:

datasort(:,1) = round(datasort(:,1));

这给了我(前 10 分),

0   0.0115106217563152
1   0.356697350740433
1   0.659623980522156
1   1.69302666187286
2   2.30387997627258
2   3.98834538459778
2   4.94714736938477
3   7.16749382019043
3   8.59203147888184
4   11.1872768402100

我仍然不知道如何将相同距离的强度相加!!!

最佳答案

我会首先使用 histc 来合并数据的第一列,然后将 histc 返回的索引传递给 accumarray对第二列进行操作。请注意,您甚至不需要为此对数据进行排序,尽管您仍然需要调用 abs 来删除负数。

>> data = [0.119865417480469   0.0115106217563152
0.669918060302734   0.356697350740433
0.909893035888672   0.659623980522156
1.45951080322266    1.69302666187286
1.70020294189453    2.30387997627258
2.24539566040039    3.98834538459778
2.49082183837891    4.94714736938477
3.02403259277344    7.16749382019043
3.28177261352539    8.59203147888184
3.79549789428711    11.1872768402100]

data =

         0.119865417480469        0.0115106217563152
         0.669918060302734         0.356697350740433
         0.909893035888672         0.659623980522156
          1.45951080322266          1.69302666187286
          1.70020294189453          2.30387997627258
          2.24539566040039          3.98834538459778
          2.49082183837891          4.94714736938477
          3.02403259277344          7.16749382019043
          3.28177261352539          8.59203147888184
          3.79549789428711            11.18727684021

>> [~, idx] = histc(data(:,1), [0:224]) 

idx =

     1
     1
     1
     2
     2
     3
     3
     4
     4
     4

>> result = accumarray(idx, data(:,2))

result =

           1.0278319530189
          3.99690663814544
          8.93549275398255
          26.9468021392823

>> 

希望对您有所帮助!

编辑:

只是为了确认这在不对数据进行排序的情况下确实有效

>> % Unsort your data snippet to illustrate
>> data = data([randperm(length(data))],:)

data =

          3.79549789428711            11.18727684021
          1.45951080322266          1.69302666187286
         0.909893035888672         0.659623980522156
          2.24539566040039          3.98834538459778
          1.70020294189453          2.30387997627258
         0.119865417480469        0.0115106217563152
         0.669918060302734         0.356697350740433
          3.28177261352539          8.59203147888184
          3.02403259277344          7.16749382019043
          2.49082183837891          4.94714736938477

>> [~, idx] = histc(data(:,1), [0:224])

idx =

     4
     2
     1
     3
     2
     1
     1
     4
     4
     3

>> result = accumarray(idx, data(:,2))

result =

           1.0278319530189
          3.99690663814544
          8.93549275398255
          26.9468021392823

>>

关于arrays - 根据条件在数组/向量中添加单元格 - Matlab,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23002123/

相关文章:

javascript - 对象数组 - 与其他列数据相比增加一列

matlab - 按字典顺序列出数字 1,...,n 的所有排列

matlab:评估向量时的错误/精度

Matlab MCR缺少内部类

vb.net - 在 VB.NET 中对对象列表进行排序

sql - 使用 GROUP BY 连接两个 SQL 表未达到预期结果

python - python中的Opencv排序序列

python - 适用于 numpy 数组和 pandas 数据帧的列切片方法

c# - c#中带有字符串键的数组数组

JavaScript 数组格式问题