有没有人帮我看看这个程序,想给Excel表格里的数据按范围分个类,但是最后输出的是满足条件的数的序号而不是数本身,为啥呀?图一是程序.图二是原来的数据.图三是输出的序号
把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表格中的数据转换为数值数组,然后按照范围分成不同的类别,并显示满足条件的数据的序号。
顶一下,加油
代码本身的截图发出来看看
输了一组数据试了下,确实就是这个问题:当前打印的只是索引,要加上变量引用索引才能正确打印。
代码:
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);
运行了
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