有没有人帮我看看这个程序

有没有人帮我看看这个程序,想给Excel表格里的数据按范围分个类,但是最后输出的是满足条件的数的序号而不是数本身,为啥呀?图一是程序.图二是原来的数据.图三是输出的序号

img

img

img

把disp(b1)改成disp(B(b1))就可以了吧,楼上都在讨论啥呢。。。。。
有用的话点个采纳哦,还有问题可以继续提问

这是c++11/98/14吗,看不懂

正如楼上所说,find函数返回的是满足条件的数据的序号(注意:返回的不是满足条件的数据)。如果想要获取满足条件的数据,还需要一步操作,即用序号取得对应的数据

引用chatgpt内容作答:
看起来你的代码主要是从Excel表格中读取数据并将其分成不同的类别,然后显示每个类别中满足条件的数据的序号。你的代码有几个问题,导致输出的是满足条件的数据的序号而不是数据本身。

问题出在以下这一行:

A = X3;

在这里,你将Excel表格的第一列数据(X3)赋值给了变量A。这意味着A将会是一个单元格数组,其中包含了从Excel中读取的字符串数据,而不是数值数据。之后的操作都是基于A的内容进行的。

接着你使用了下面这行代码将A转换为数值数组:

B = cell2mat(A);

然而,cell2mat 函数只能用于将单元格数组转换为数值数组,而在你的情况下,A 包含的是字符串数据,这将导致错误。所以,B 并没有正确地得到数值数据,仍然是一个空的数组。

因此,在之后的条件判断中,由于B是空数组,所有的条件都不会满足,所以你得到的b1、b2、b3、b4 都是空数组,这就解释了为什么最后输出的是空数组。

为了修复这个问题,你需要将数据正确地转换为数值数据。假设你的Excel表格中的数据都在第一列,你可以使用以下代码来实现:

[X1, X2, X3] = xlsread('fruit.xlsx');
B = cell2mat(X3); % 将第一列数据转换为数值数组

b1 = find(B > 0 & B < 1);
disp(b1);
b2 = find(B >= 1 & B <= 1.583);
disp(b2);
b3 = find(B > 1.583 & B < 42.19);
disp(b3);
b4 = find(B == 0 | B == 42.19);
disp(b4);

这样,你就能正确地将Excel表格中的数据转换为数值数组,然后按照范围分成不同的类别,并显示满足条件的数据的序号。

顶一下,加油

代码本身的截图发出来看看

输了一组数据试了下,确实就是这个问题:当前打印的只是索引,要加上变量引用索引才能正确打印。

img

代码:

clc,clear,close all;
[X1,X2,X3]=xlsread('data_test1.xlsx');
A=X3;
B=cell2mat(A);
b1=find(B>0&B<1);
    disp('B>0&B<1');
    disp(b1); %打印索引
    disp(B(b1));  %打印数值
b2=find(B>=1&B<=1.583);
    disp('B>=1&B<=1.583');
    disp(b2);
    disp(B(b2));
b3=find(B>1.583&B<42.19);
    disp('B>1.583&B<42.19');
    disp(b3)
    disp(B(b3));
b4=find(B==0|B==42.19);
    disp('B==0|B==42.19')
    disp(b4)
    disp(B(b4));

打印结果:

B>0&B<1
     4
    15
    16
    19

    0.3500
    0.9333
    0.2333
    0.9333

B>=1&B<=1.583
     3
     6
    11
    13
    24
    25
    26

    1.5000
    1.5000
    1.5000
    1.4000
    1.4000
    1.5000
    1.5000

B>1.583&B<42.19
     1
     2
     5
     7
     8
     9
    10
    12
    17
    18
    21
    22
    23
    27
    28
    29
    30
    31

    3.5227
    6.2000
    6.2000
    3.5227
    3.5227
    3.5227
    1.8902
    6.2000
    3.5227
    3.5227
    3.5625
    3.5227
    3.5227
    6.2000
    3.5227
    6.2000
    3.5227
    4.0185

B==0|B==42.19
    14
    20

         0
   42.1900

把你的代码贴出来,别放一张图,这样别人更容易给你去解决

代码有问题,数据取错值了。find方法就是取数据的索引位置的,所以你取到的数据都是序号而不是具体的数值。

完整的代码弄出来撒

find函数返回满足条件的索引
试试

disp(string4);
[X1,X2,X3]=xlsread('fruit.xlsx');
A=X3;
B=cell2mat(A);
b1=B(B>0 & B<1);
disp(b1); 
b2=B(B>=1 & B<=1.583);
disp(b2);
b3=B(B>1.583 & B<42.19);
disp(b3);
b4=B(B==0 | B==42.19);
disp(b4);

运行了

img

matlab中,对Excel表格中数据进行分类

1. 使用readtable函数读取Excel表格中的数据,将其存储为MATLAB表格格式。比如:```matlabT = readtable('data.xlsx');```
2. 假设数据存储在Excel表格的'Column 1'列中,使用unique函数将该列数据进行分类。```matlabcategories = unique(T{:, 'Column 1'});```
3. 使用tabulate函数计算各类别的出现频率和占比。```matlabtbl = tabulate(T{:, 'Column 1'});labels = str2double(tbl(:, 1)); %将类别标签转为数值类型counts = cell2ma