matlab文本文件读取

本文详细介绍了MATLAB中进行文件操作的基本步骤,包括使用fopen、fscanf和fclose处理文本文件,以及介绍MATLAB的数据类型、变量命名规则和矩阵操作。通过实例演示了如何读取包含坐标数据的文本文件并解析内容。
摘要由CSDN通过智能技术生成
文件操作是一种重要的输入输出方式,即从数据文件读取数据或将结果写入数据文件。MATLAB 提供了一系列低层次输入输出函数,专门用于文件操作。
文件数据格式有两种形式,一是二进制文件,二是文本文件。在打开文件时需要进一步指定文件格式类型,即指定是二进制文件还是文本文件。

1.一般步骤

(1)文件的打开:fopen 函数的调用格式为:fid= fopen(文件名,打开方式)。

(2)读取文本文件:fscanf 函数的调用格式:[A]= fscanf (fid, format, size),功能:函数 fscanf 从文件代号为 fid 的文件中读入数据到 A 中。

(3)文件的关闭:关闭文件用 fclose 函数,调用格式为:sta=fclose(fid),sta 表示关闭文件操作的返回代码,若关闭成功,返回 0,否则返回–1。

2.举例说明

例:读取下列坐标数据。

A 500 450 300

B 490 -100 -300

C 200 -195 109

D -643 -482 -187
代码如下:
[F,P]=uigetfile('*.txt','选择已写入坐标的文件:'); 
%F 为 filename 的缩写,P 为 pathname 的缩写,文件格式为*.txt 
fna1=strcat(P,F);fpath=P; 
%‘将路径 P 和文件名 F 赋值于字符串变量 fna1,将路径赋值给字符串变量 fpath,便于打开文件和利用路径
fid=fopen(fna1,'r');
%将用只读的方式打开文件 fnal 赋予 fid
i=0;pt=[]; %定义一个空矩阵 pt,用 i 来计数
while (~feof(fid)) %文件结尾时 feof(文件句柄)=0,其它为 1,此时也可以用 feof(fp)==0 代替
i=i+1;
survey(i).dh=fscanf(fid,'%s',1); %survey(i)为结构体,用 fscanf 方式读取一组字符型数据存入 survey(i).dh
survey(i).x=fscanf(fid,'%f',1); %用 fscanf 方式读取 一组浮点型数据存入 survey(i).x 中
survey(i).y=fscanf(fid,'%f',1); %用 fscanf 的方式读取一组浮点型数据存入survey(i).y 中
survey(i).h=fscanf(fid,'%f\n',1); %‘用 fscanf 的方式读取一组浮点型数据存入survey(i).h 中
pt=[pt;survey(i).x survey(i).y survey(i).h]; %将 survey(i).x survey(i).ysurvey(i).h 放入 pt 矩阵
end
status=fclose(fid); % 关闭句柄值是 fid 的文件

3.基础知识

3.1数据类型

MATLAB 共有六种基本的数据类型,每一种类型可以是一维、二维和多维的。
(1)双精度型(double),例如:5、-3.6、[1 2;9 3;2 0]、2-3i。它们是最常用的类型。
(2)字符型(char),例如:’hi’、 ’3+4i’、 ’山东理工大学’。
(3)稀疏型(sparse),例如:speye(4)是双精度稀疏矩阵,只存储矩阵中的非 0 元素。
(4)单元型(cell),例如:{1,‘good’,[1 2 3]}单元数组,数组中的每个元素可以是其他任何
一种数据类型,它通常可以将相关的尺寸大小不同的数据组合在一起。
(5)结构型(struct),例如:A.name;A.id;age 结构数组相当于数据库的纪录,把相关的数据
排列在一起,称为属性。
(6)8 位型(uint8),例如:uint8(magic(4))为无符号整数,最大可表示 255,但无法进行任何
数学运算。

3.2变量

变量命名的规则是:
(1)第一个字母必须是英文字母 ,字母间不可留空格。
(2)MATLAB 的变量要区分大小写,如My_name,my_name 分别表示不同的变量。
(3)最多只能有 31 个字母,MATLAB 忽略多余字母(在 MATLAB 第 4 版,则是 19 个字母)。
(4)MATLAB 在使用变量时,不需预先经过变量宣告(Variable Declaration C++ int i,j),而且所有数值变量均以预设的 double 形式储存。
(5)若要加入注解(Comments),可以使用百分比符号(%)。
(6)MATLAB 提供的标准函数名以及命名必须用小写字母,所以建议使用者定义变量时都用小写字母,任何汉字及汉字符号、标点等都不能作为变量名。
(7)变量的定义实质就是“把什么值用什么变量存储”。

3.3常用的数学函数

y = abs(x) % 取 x 的绝对值;
y = mod(x) % 模除求余 ;
y = sin(x) % 取 x 的正弦值,x 以弧度为单位;
y = sind(x) % 取 x 的正弦值,x 以角度为单位;
y = exp(x) % 自然指数 exp(x);
y = log(x) % 自然对数 ln(x),x 为正数;
y = x^a % 指数运算;
y = fix(x) %向零方向取整;
y = round(x) %四舍五入到最邻近的整数。

3.4表达式

将常量、变量、函数及 M 函数用运算符号按一定的规则连接起来的式子就叫做表达式。
运算符号包括算术运算符、关系运算符、逻辑运算符及 MATLAB 特有的逻辑函数和冒号运算、小括号运算。小括号运算是强制改变运算顺序的特殊运算符号,它是最优先级的运算。

3.5字符串

一个 ASCII 字符称为一个字元。多个字元可以构成一个字串(Strings),一个字符串是被视为一个列向量进行储存,每一个元素是其 ASCII 码值。
字元的操作函数有两个, abs ( 字元或字符串 ) char ( 行向量或列向量 ) abs 返回的是字符串中所有字元对应的 ASCII 码组成的向量,char 返回的是其向量值所对应的字符。
字 符 串 转 换:
abs %字符串到 ASCII 转换;
setstr  %ASCII 转换成字符串;
sscanf  %用格式控制,字符串转换成数字;
fprintf  %把格式化的文本写到文件中或显示屏上;
sprintf  %用格式控制,数字转换成字符串;
lower  %字符串转换成小写;
upper  %字符串转换成大写;
num2str  %数字转换成字符串;
str2num  %字符串转换成数字;
str2mat  %字符串转换成一个文本矩阵。

3.6矩阵

在输入矩阵时,应遵循下列约定: 整个矩阵用中括号括起来,同一行的数据应用空格或逗号隔开,不同行应用分号隔开。例如输入一个每行都是 1 的 3 阶矩阵,可在 MATLAB 的命令窗口中输入如下命令:
>> A=[1,1,1;1,1,1;1,1,1] % 则 MATLAB 就立即把刚才输入的矩阵给显示出来。

3.6.1矩阵加减

(1)矩阵的加减与一般纯量(Scalar)的加减类似;
(2)相加或相减的矩阵必需具有相同的维度。

3.6.2矩阵乘法

(1) 矩阵的乘法不可逆。
(2) 矩阵的“.*”与“*”是不同的。
(3) 矩阵可以和一个列向量作右乘运算,也可以和一个行向量作左乘运算。

3.6.3矩阵除法

(1)Matlab 提供了两种除法运算:左除(\)和右除(/)。一般情况下, x=a\b 是方程 a*x =b 的解,而 x=b/a 是方程 x*a=b 的解。
(2)如果 a 为非奇异矩阵,则 a\b b/a 可通过 a 的逆矩阵与 b 阵得到: a\b = inv(a)*b
b/a = b*inv(a)。
(3)数组除法: A./B 表示 A 中元素与 B 中元素对应相除。
矩阵和一个数相乘或相除,结果是矩阵中每个元素乘以或除以该数。

3.6.4矩阵转置

想得到任何矩阵 z 的转置(Transpose),则可表示成矩阵 z′

3.6.5矩阵拆分

利用冒号表达式获得子矩阵。
①A(:,j)表示取 A 矩阵的第 j 列全部元素;
A(i,:)表示取出 A 矩阵第 i 行的全部元素;
A(i,j)表示取 A 矩阵的第 i 行、第 j 列的元素。
②A(i:i+m,:)表示取 A 矩阵的第 i~i+m 行的全部元素;
A(:,k:k+m)表示取 A 矩阵的第 k~k+m 列的全部元素;
A(i:i+m,k:k+m)表示取 A 矩阵第 i~i+m 行内,并在第 k~k+m 列中的所有元素。
A(i,m:k:n)表示从矩阵 A 的第 i 行中,第 m 到 n 列每隔 k 列取一个值。
③A(i)表示从 A 矩阵中取第 i 个数(以列的顺数计数)。

3.6.6对角矩阵

对角矩阵定义:只有对角线上有非 0 元素的矩阵。
例:提取对角线上的元素
>> D= diag ([1 2 3;4 5 6;7 8 9])
D =
1
5
9
例:构造对角矩阵:diag(V)
>> d= diag (1:5)
d =
1 0 0 0 0
0 2 0 0 0
0 0 3 0 0
0 0 0 4 0
0 0 0 0 5
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
tf-idf是一种常用的文本特征提取方法,它可以将文本数据转换为数值型数据。tf-idf的全称是Term Frequency-Inverse Document Frequency,即词频-逆文档频率。它的基本思想是:一个词语在一个文档出现的次数越多,同时在其他文档出现的次数越少,那么它就越能代表该文档的特点,也就越重要。 在应用tf-idf算法进行文本特征提取时,一般需要以下几个步骤: 1. 分词:将文本数据按照一定规则进行分词,将每个词语作为一个特征。 2. 计算词频:统计每个词语在文本数据出现的次数,得到词频向量。 3. 计算逆文档频率:统计每个词语在所有文本数据出现的次数,得到逆文档频率向量。 4. 计算tf-idf值:将词频向量和逆文档频率向量相乘,得到tf-idf值向量。 5. 特征选择:根据实际需要选择一定数量的tf-idf值较高的词语作为特征。 下面是一个示例代码,展示如何使用matlab实现tf-idf算法: ```matlab % 假设有一份文本数据 textData = [ "this is the first document"; "this is the second document"; "and this is the third one"; "is this the first document"; ]; % 分词 documents = tokenizedDocument(textData); % 计算词频 tf = tfidf(documents); % 计算逆文档频率 idf = log10(size(documents,1)./sum(tf>0)); % 计算tf-idf值 tfidf = tf.*idf; % 特征选择 [~,idx] = sort(sum(tfidf,1),'descend'); numFeatures = 2; selectedWords = documents.Vocabulary(idx(1:numFeatures)); % 输出结果 disp("Selected words:"); disp(selectedWords); disp("tf-idf values:"); disp(tfidf(:,idx(1:numFeatures))); ``` 这个示例代码将一个包含4个文本数据的字符串数组进行了分词,并使用了matlab自带的tfidf函数计算了词频、逆文档频率和tf-idf值。最后,根据tf-idf值的大小选择了2个重要的词语作为特征。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值