怎么将matlab导入的数据中的文本型数据转化为数字类型数据类型

怎么将matlab导入的数据中的文本型数据转化为数字类型数据类型,第1张

1、整型:(int8;uint8;int16;uint16;int32;uint32;int64;uint64)通过intmax(class)和intmin(class) 函数返回该类整型的最大值和最小值,例如intmax(‘int8’)=127;
2、浮点:(single;double)
浮点数:REALMAX('double')和REALMAX('single')分别返回双精度浮点和单精度浮点的最大值,REALMIN('double')和REALMIN ('single')分别返回双精度浮点和单精度浮点的最小值。
3、逻辑:(logical)
Logical:下例是逻辑索引在矩阵 *** 作中的应用,将55矩阵中大于05的元素设定为0:
A = rand(5);
A(A>05)=0;
4、字符:(char)
Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。构成矩阵或向量的行字符串长度必须相同。可以使用char函数构建字符数组,使用strcat函数连接字符。
例如,命令 name = ['abc' ; 'abcd'] 将触发错误警告,因为两个字符串的长度不等,此时可以通过空字符凑齐如:name = ['abc ' ; 'abcd'],更简单的办法是使用char函数:char(‘abc’,’abcd’),Matlab自动填充空字符以使长度相等,因此字符串矩阵的列纬总是等于最长字符串的字符数
例如size(char(‘abc’,’abcd’))返回结果[2,4],即字符串’abc’实际存在的是’abc ’,此时如需提取矩阵中的某一字符元素,需要使用deblank函数移除空格如name =char(‘abc’,’abcd’); deblank(name(1,:))。
此外,Matlab同时提供一种更灵活的单元格数组方法,使用函数cellstr可以将字符串数组转换为单元格数组:
data= char(‘abc’,’abcd’)
length(data(1,:)) -> 4
cdata=cellstr(data)
length(cdata{1}) ->3
常用的字符 *** 作函数
blanks(n) 返回n个空字符
deblank(s) 移除字符串尾部包含的空字符
(string) 将字符串作为命令执行
findstr(s1,s2) 搜索字符串
ischar(s) 判断是否字符串
isletter(s) 判断是否字母
lower(s) 转换小写
upper(s) 转换大写
strcmp(s1,s2) 比较字符串是否相同
strncmp(s1,s2,n) 比较字符串中的前n个字符是否相同
strrep(s1,s2,s3) 将s1中的字符s2替换为s3
5、日期和时间
Matlab提供三种日期格式:日期字符串如’1996-10-02’,日期序列数如729300(0000年1月1日为1)以及日期向量如 1996 10 2 0 0 0,依次为年月日时分秒。
常用的日期 *** 作函数
datestr(d,f) 将日期数字转换为字符串
datenum(str,f) 将字符串转换为日期数字
datevec(str) 日期字符串转换向量
weekday(d) 计算星期数
eomday(yr,mth) 计算指定月份最后一天
calendar(str) 返回日历矩阵
clock 当前日期和时间的日期向量
date 当前日期字符串
now 当前日期和时间的序列数
6、结构
结构是包含已命名“数据容器”或字段的数组。结构中的字段可以包含任何数据。
7、构建结构数组
(1)赋值方法
下面的赋值命令产生一个名为patient的结构数组,该数组包含三个字段:
patientname = 'John Doe';
patientbilling = 12700;
patienttest = [79 75 73; 180 178 1775; 220 210 205];
在命令区内输入patient可以查看结构信息:
name: 'John Doe'
billing: 127
test: [3x3 double]
继续赋值可扩展该结构数组:
patient(2)name = 'Ann Lane';
patient(2)billing = 2850;
patient(2)test = [68 70 68; 118 118 119; 172 170 169];
赋值后结构数组变为[1 2]。
(2)构建结构数组:struct函数
函数基本形式为:strArray = struct('field1',val1,'field2',val2, )
例如:
weather(1) = struct('temp', 72,'rainfall', 00);
weather(2) = struct('temp', 71,'rainfall', 01);
weather = repmat(struct('temp', 72, 'rainfall', 00), 1, 3);
weather = struct('temp', {68, 80, 72}, 'rainfall', {02, 04, 00});
(3)访问结构数据
以下都是合法的结构数组访问命令:
mypatients = patient(1:2) 获取子结构数据
mypatients(1) 访问结构数据
patient(2)name 访问结构数据中的特定字段
patient(3)test(2,2) 访问结构数据中的特定字段(该字段为数组)
bills = [patientbilling] 访问多个结构
tests = {patient(1:2)test} 提取结构数据转换成单元格数组
使用结构字段的动态名称
通过structName(expression_r_r_r)可以赋予结构字段名称并访问数据。例如字段名为expression_r_r_r、结构名为structName,访问其中第7行1至25列数据可以使用命令:structName(expression_r_r_r)(7,1:25)。
例如,存在一个学生每周成绩数据结构数组,其数据通过以下方式建立:
testscoreswangweek(1:25) =
[95 89 76 82 79 92 94 92 89 81 75 93
85 84 83 86 85 90 82 82 84 79 96 88 98];
testscoreschenweek(1:25) =
[87 80 91 84 99 87 93 87 97 87 82 89
86 82 90 98 75 79 92 84 90 93 84 78 81];
即结构名为testscores,字段使用每个学生的名称命名,分别为wang和chen,每个学生下面包含名为week的成绩结构数组。
现计算给定结构名称、学生名称和起止周数的平均分数。
在命令窗口中输入 edit avgscorem,输入以下代码后保存文件:
function avg = avgscore(struct,student, first, last)
avg = sum(struct(student)week(first:last))/(last - first + 1);
在命名窗口中输入:avgscore(testscores, 'chen', 7, 22) 计算学生陈从第7周到第22周的平均分数。
(4)添加和删除结构字段
命令[struct](index)(field)可添加或修改字段。如patient(2)ssn = '000-00-0000' 在结构patient中添加一个名为ssn的字段。
删除字段使用rmfield函数,如patient2 = rmfield(patient, 'name') 删除name字段并产生新的结构。
8、单元格数组:(cell)
单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意纬度的数组。
访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格数组A中的第2行第5列单元格。
(1)构建单元格数组:赋值方法
使用花括号标识可直接创建单元格数组,如:
A(1,1) = {[1 4 3; 0 5 8; 7 2 9]};
A(1,2) = {'abcd'};
A(2,1) = {3+7i};
A(2,2) = {-pi:pi/10:pi};
上述命令创建22的单元格数组A。继续添加单元格元素直接使用赋值如A(2,3)={5}即可,注意需使用花括号标识。简化的方法是结合使用花括号(单元格数组)和方括号()创建,如C = {[1 2], [3 4]; [5 6], [7 8]};
(2)构建单元格数组:函数方法
Cell函数。如:
B = cell(2, 3);
B(1,3) = {1:3};
(3)访问数据
通过索引可直接访问单元格数组中的数据元素,例如:
N{1,1} = [1 2; 4 5];
N{1,2} = 'Name';
N{2,1} = 2-4i;
N{2,2} = 7;
c = N{1,2}
d = N{1,1}(2,2)
9、函数句柄
函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式 fhandle = @functionname 可以创建函数句柄,例如 trigFun=@sin,或匿名函数sqr = @(x) x^2;。
使用句柄调用函数的形式是 fhandle(arg1, arg2, , argn) 或 fhandle()(无参数)。如:
trigFun(1)。例:
function x = plotFHandle(fhandle, data)
plot(data, fhandle(data))
plotFHandle(@sin, -pi:001:pi)
数据类型转换如C语言中的强制类型转换相似eg:
y=9;
z=double(y);
Matlab中的图像数据类型转换
MATLAB中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double因此 I2=im2double(I1) :把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:Function '' is not defined for values of class 'uint8'。

1、如果数据没有被保存为mat文件,那么将数据保存为矩阵形式,假设此矩阵为A。利用如下程序:
fid=fopen('文件路径','wt');
%新建文件,你要保存到的文件路径,该路径的最后为'\文件名txt'
[m,n]=size(A);
%接上,或者是'\文件名dat'
for
j=1:m
for
z=1:n
if
z==n
fprintf(fid,'%g\n',total(j,z));
%一行一行的写入数据,到该行的最后一个数据,回车
else
fprintf(fid,'%g\t',total(j,z));
%相邻两个数据之间隔2个字符,相当于按一次Tab键
end
end
end
fclose(fid);
2、如果数据已经被保存为了mat文件,先将mat文件中的数据load到矩阵A中。在1中程序的基础上添加一行:
A=load('xxxmat');
然后再运行1中程序即可把数据写入你想要的txt和dat文件中。

1、先把数据保存为dat文件。2、使用fscanf命令调用,格式为:fid=fopen('dat','r');z=fscanf(fid,'%g');status=fclose(fid)。(间接导入)

这是不可以的。mat文件是matlab专用的存储workspace的文件,如果强制存储成txt文件存储并打开,文本只会显示为乱码,需要把后缀名改回mat,再在matlab中打开,才能使用。

如果是需要把工作空间里面的数据导出可以编写一个小程序,把矢量、矩阵写出到txt中,或者直接复制粘贴到txt文本文件中、或者excel表格中。

具体做法是,双击右边workspace里面的变量,这时matlab会d出一个表格,

选择表格里面的区域,直接ctrl+c可以复制。

打开一个txt文本文件或者excel文件,都可以直接粘贴。

fidr=fopen('读文件名txt','r');
fidw=fopen('写文件名txt','w');
tr=fgetl(fidr);
while ischar(tr)
a=cellfun(@str2num,regexp(tr,'[\s:]','split'));
num=a(1);
datar=reshape(a(2:end),2,[]);
dataw=[];
dataw(datar(1,:))=datar(2,:);
tw=sprintf('%g,',dataw);
tw=[tw(1:end-1) ' ' num2str(num)];
fprintf(fidw,[tw '\r\n']);
tr=fgetl(fidr);
end
fclose(fidr);
fclose(fidw);

如果你原有的文件每一行都是1 1:1 3:099539 4:-005889 这种格式

那么以上代码可以将每一行转为1,0,099539,-005889  1格式

第一第二行中,改为你原文件的文件名,和转格式后保存成的文件名


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/13396207.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-28
下一篇 2023-07-28

发表评论

登录后才能评论

评论列表(0条)

保存