【问题标题】:Separating range into intervals and outputting it into an array将范围分成间隔并将其输出到数组中
【发布时间】:2021-01-15 03:27:48
【问题描述】:

我试图将 1200 个值的范围分成 10 个不同的区间,并找出每个区间中的值的数量。这是我目前所想出的。

load('Data.mat')
% % Train=Data(i_tr,:);
l_train=height(Train);
Sdrr=Train.SDRR;

R_SDRR=range(Sdrr);
min_SDRR=min(Sdrr);
max_SDRR=max(Sdrr);
intervals=10;
int_SDRR=R_SDRR/intervals;
data=zeros(intervals,1);

for j=1:l_train
    for k=1:intervals-1
        if min_SDRR+(k-1)*int_SDRR<=Sdrr(j)<min_SDRR+(k)*int_SDRR
            data(k)=data(k)+1;
        else

        end
    end
end 

我得到的值似乎是累积的,而不是在输出数组中分开的,即 238,519,745...(这一定是错误的,因为输入的总数是 1200)

【问题讨论】:

  • 能否在 Data.mat 中包含一些值?
  • 确定 data.mat 是一个 1613*4 的表,它被缩减为一个 1200*4 的表,其值如 ID: 1,2,3,4 Pwave:1 0 0 0 1 1 1 SDRR :0.0725 0.04047 0.10232 诊断:0 0 0 1 1 1 等
  • 我提取了表的 SDRR
  • 在下面查看我的答案,如果这不是您想要做的,请告诉我:将您的 1200x4 分成 10 个不同的间隔。

标签: arrays matlab for-loop range


【解决方案1】:

我试图重现我认为你正在尝试做的事情。

我创建了一些与您的尺寸相匹配的随机数据:

X = rand(1613,4);
X = X(1:1200,:);

现在X 是 1200×4。

您想使用 10 个间隔:

n_interval = 10;

需要计算在每个区间内您将拥有多少个值 (len_interval):

len_X = size(X,1);

% using round() in case len_X/n_interval is not an int
len_interval = round(len_X/n_interval);

然后遍历每个区间并将值存储在interval 单元格中。

interval = {};
for i = 1:n_interval
    if i==n_interval % last interval
        interval{i} = X((i-1)*len_interval+1:len_X);
    else
        interval{i} = X((i-1)*len_interval+1:i*len_interval);
    end
end

【讨论】:

  • 看来我没有把我想做的事情说清楚,我很抱歉。我想将范围的第一个十分之一(即 0 到 0.04 之间)和第二个十分之一之间的值的数量相加,依此类推。此解决方案将 1200 值切割为第一个 120 值和第二个 120 值等。
【解决方案2】:

如果我理解正确,您希望将 N = 1200 值分配到 intervals 存储桶中。

intervals = 10;
min_range = 0;
max_range = 100;

data = rand(1200, 1) * max_range; % 1200 random numbers between 0 and 100

intervals_size = (max_range - min_range) / intervals; % Size of each interval

现在我们可以通过从数据中减去最小值,将结果除以区间大小,然后floor计算结果来计算给定数据落入的“区间数”。

interval_num = floor((data - min_range) / intervals_size);

然后,这只是计算每个数字存在多少的问题。您可以通过多种方式做到这一点:

例如。 1:

intervals_count = zeros(intervals, 1);
for ii = 1:intervals
    intervals_count = sum(interval_num == ii - 1)
end

例如。 2:

intervals_count = zeros(intervals, 1);
for ii = 1:length(interval_num)
    group_num = interval_num(ii) + 1;
    intervals_count(group_num) = intervals_count(group_num) + 1;
end

例如。 3:如果你有 Matlab >= 2019a,只需使用groupcounts() function

[intervals_count, interval_num2] = groupcounts(interval_num);

【讨论】:

    【解决方案3】:

    我使用了 and 运算符并更改了 for 循环的顺序,它修复了我的答案

    R_SDRR=range(Sdrr);
    min_SDRR=min(Sdrr);
    max_SDRR=max(Sdrr);
    intervals=10;
    int_SDRR=R_SDRR/intervals;
    data=zeros(intervals,1);
    int_array = zeros(10,1);
    
    
    for j=1:intervals
        for k=1:l_train
         if Sdrr(k)<min_SDRR+(j)*int_SDRR && Sdrr(k)>=min_SDRR+(j-1)*int_SDRR
    int_array(j)= int_array(j)+1;     
         end
        end
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-25
      • 1970-01-01
      • 2012-10-19
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      相关资源
      最近更新 更多