Matlab常用小结

本文总结了Matlab在命令行模式下作为高级计算器的使用,以及如何处理格式化和非格式化文本文件,批处理文件,Cell类型的理解,以及字符串处理的多种方法,包括ASCII码、字符串数组运算、替换与查找、常用操作函数和正则表达式。通过实例展示了如何在Matlab中高效地进行文件操作和字符串管理。
摘要由CSDN通过智能技术生成

下面是最近使用matlab常用的一些方法总结,不断更新,方便以后查阅!

问题1:如果我想把matlab仅仅是当成一个计算器来使用呢?或者说高级点的计算器?不想开UI界面,能在命令行下快速启动。

简单,只需运行:

./matlab -nosplash -nodesktop -nojvm
nosplash就是省去启动界面

nodesktop和nojvm应该都是关闭UI界面的

然后就能在控制台下进行操作了。方便快捷。


问题2如何导入格式化文本文件

这里的文本文件指的是ASCII编码的。

可以使用importdata命令例如:

data = importdata('./text.txt',' ',2);
读取当前目录下文件名为text.txt的文本文件,并且以空格作为分割符号,2指的是该文件前两行是说明文字,不是我们需要的,所以跳过。。如果不存在就不用这个参数了。

详细help importdata

这里导入的文件 每行数据必须得是列相同,或者比开头的列少,否则会被分割成多行了。

如果要导入非格式化的文本文件,我们可以采用类似open read的函数调用来操作文件。


问题3:如何导入非格式化的文本文件

这里可以使用fopen来打开文件,和c下是一样的,返回文件句柄,我们知道,在Unix下,0 1 2文件句柄分别表示了STDIN STDOUT STDERR,如果我们继续打开文件,那么句柄就会递增,同样的这里也是。。

fid=fopen('filename','permission');
filename就是文件名了,permission就是文件的权限
   'r'     open file for reading
        'w'     open file for writing; discard existing contents
        'a'     open or create file for writing; append data to end of file
        'r+'    open (do not create) file for reading and writing
        'w+'    open or create file for reading and writing; discard
                existing contents
        'a+'    open or create file for reading and writing; append data
                to end of file
        'W'     open file for writing without automatic flushing
        'A'     open file for appending without automatic flushing
   

然后利用该文件句柄就可以打开文件,或者修改文件

可以用fread  fwrite frewind fclose 进行各自操作。。。

但是这里读入都是我们指定解码的格式,不妨便,可以使用行输入;

fgets可以返回当前行,同时fid对应的文件指针下移动,返回当前行包括最后的换行符,如果不想要换行符号,可以使用fgetl

fid = fopen(filename);

num = 0;
while fid
    line = fgetl(fid);
    if ~ischar(line)
        break;
    end
    num = num+1;
end

info = sprintf('the total num:%d',num);
disp(info);
fclose(fid);

上面小例子就简单打印出行数。


问题4:如何批处理文件

批处理文件,其实最主要的就是能够读入批量文件,然后要怎么处理就转换成单文件循环处理罢了。

利用dir命令,可以显示某个路径下的文件,

dir
直接显示当前目录下文件,记得返回的是一个结构体数组,同时文件也包括.  和 .. 这两个小东西

dir('../img/*.jpg')

可以带参数,表示你的目标路径,如果只是简单跟路径,返回的也是那个路径下所有文件,如果你需要过滤,可以用上数通配符方式


问题5:什么是cell类型啊!!!!

不用怕,五分钟,让你爱上cell类型!!尤其对于有一点点点点c编程经验的人。。!!!如果懂得Java的hashmap那就更是能和struct这个结构贯通了。。。

这个数据类型确实是我们以前从未见过,不都只有uint8 uint16 uint32 double char ....

我这里举个例子,说明下为什么会需要cell这个类型;)

我们都知道,在C语言里面可以动态创建数组,即malloc可以随时需要的时候分配出堆空间,这种语言特性使得我们可以使用链表这种结构。

例如,我们在生成一个二维数组的时候,可以使用这种指针的数组来创建。假设现在有如下数据:

4 1 2 3 4

3 3 56 6

6 4 8 3 1 5 7

希望你能表示在一个数组里,该数据的每行开头是后面数据元素的个数,当然我们使用传统的静态数组是无法满足这种动态改变的特性,而且数组长度不等这就让我们头疼了,先生成一个大树组???空间利用率太低了,所以我们先生成一个指向指针的指针  int **arr;然后再以此动态分配空间;

如果在matlab下如何实现呢?

我们的数组都是静态的,而且列不同,比行不同更蛋疼。。。

有指针么?好像没见过,这就cell随之产生了。

cell里面每个元素可以装任何数据类型,这就相当与cell每个元素都可以作为一个指向我们的数据元素的指针了。

cell的每个单元都可以存储任何数据,比如传递函数等。当然,存储矩阵更是没有问题的了。但是用cell数据类型之前,要先初始化。

a=cell(n,m)

那么就把a初始化为一个n行m列的空cell类型数据。

如何赋值呢?

a{1,1}=rand(5)

那么a的1行1列的单元中存储的就是一个随机的5×5的方阵了。

那么要用第一个单元中的方阵中的某个值呢?

可以如下引用:a{1,1}(2,3)

就可以了,引用cell单元时要用{},再引用矩阵的某个数据就要用()了。

cell单元中的每个单元都是独立的,可以分别存储不同大小的矩阵或不同类型的数据。

------------------------

多说无益,举个实际例子,仍然是上面那个c语言例子:

>> ces=cell(3,1);
>> ces{1}=[4 1 2 3 4];
>> ces{2}=[3 3 56 6];
>> ces{3}=[6 4 8 3 1 5 7];
>> ces

ces = 

    [1x5 double]
    [1x4 double]
    [1x7 double]

>> sum(ces{1}(2:end))

ans =

    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值