matlab 编程小技巧积累

nargin, nargout 指示输入、输出参数的个数

Number of function arguments


unique 找出矩阵中不同元素

Find unique elements of vector

Syntax

b = unique(A)
b = unique(A, 'rows')
[b, m, n] = unique(...)
[b, m, n] = unique(..., occurrence)

Examples

A = [1 1 5 6 2 3 3 9 8 6 2 4]
A =
   1   1   5   6   2   3   3   9   8   6   2   4
Get a sorted vector of unique elements of A. Also get indices of the first elements in A that make up vector b, and the first elements in b that make up vector A:
[b1, m1, n1] = unique(A, 'first')
b1 =
   1   2   3   4   5   6   8   9
m1 =  
   1   5   6  12   3   4   9   8
n1 =
   1   1   5   6   2   3   3   8   7   6   2   4


all 测试两矩阵元素都相等

Determine whether all array elements are nonzero or true

接着上一个例子,
Verify that b1 = A(m1) and A = b1(n1):
all(b1 == A(m1)) && all(A == b1(n1))
ans =
     1


ismember 测试一数组中的元素是否属于集合中的成员

Array elements that are members of set

Syntax

tf = ismember(A, S)
tf = ismember(A, S, 'rows')
[tf, loc] = ismember(A, S, ...)  returns an array loc containing the highest index in S for each element in A that is a member of S.

Examples

set = [5 2 4 2 8 10 12 2 16 18 20 3];
a = (1:5)'
a =
     1
     2
     3
     4
     5

[tf, index] = ismember(a, set)

tf =

     0
     1
     1
     1
     1

index =

     0
     8
    12
     3
     1


isfield 测试对象是否具有某属性值

tf = isfield(S, 'fieldname') examines structure S to see if it includes the field specified by the quoted string 'fieldname'. Output tf is set to logical 1 (true) if S contains the field, or logical 0 (false) if not. If S is not a structure array, isfield returns false.

tf = isfield(S, C) examines structure S for multiple fieldnames as specified in cell array of strings C, and returns an array of logical values to indicate which of these fields are part of the structure. If structure S contains the field specified in C{m,n}, isfield returns a logical 1 (true) in tf(m,n).


clear all 清除断点,阻止调试过程

All breakpoints remain in effect, unless your file contains (and MATLAB® has processed) one or more of the following commands:clear all,clear function,clear classes.

clear all removes debugging breakpoints in code files and reinitializes persistent variables.

使用matlab进行调试时,在函数开头加了一句" clear all;",然后在下面添加了几句断点,结果就不能进入断点状态了。"clear;"并不能清除断点。


addpath(genpath('...')) 添加指定文件夹本身和它所有的子文件夹路径到程序

Use genpath in conjunction with addpath to add a folder and its subfolders to the search path. Addmyfiles and its subfolders to the search path:

addpath(genpath('c:/matlab/myfiles'))

importdata 与 load

load函数用于导入.mat文件到一个结构struct里,importdata函数可以将文件直接导入,也可以导入.mat文件直接到变量里。


pwd 用于当前工作目录的路径

例如:

>> pwd
ans =C:\MATLAB7\work

数据类型

matlab数据类型和转换

Matlab中有15种基本数据类型,主要是整型、浮点、逻辑、字符、日期和时间、结构数组、单元格数组以及函数句柄等。

    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:下例是逻辑索引在矩阵操作中的应用,将5*5矩阵中大于0.5的元素设定为0:
       A = rand(5);
       A(A>0.5)=0;

4、字符:(char)

Matlab中的输入字符需使用单引号。字符串存储为字符数组,每个元素占用一个ASCII字符。如日期字符:DateString=’9/16/2001’ 实际上是一个1行9列向量。

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、结构数组

下面的赋值命令产生一个名为patient的结构数组,该数组包含三个字段:

patient.name = 'John Doe';
patient.billing = 127.00;
patient.test = [79 75 73; 180 178 177.5; 220 210 205];

在命令区内输入patient可以查看结构信息:

name: 'John Doe'
billing: 127
test: [3x3 double]

继续赋值可扩展该结构数组:

patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];

赋值后结构数组变为[1 2]。

8、单元格数组:(cell)

单元格数组提供了不同类型数据的存储机制,可以储存任意类型和任意维度的数组。

访问单元格数组的规则和其他数组相同,区别在于需要使用花括号{}访问,例如A{2,5}访问单元格数组A中的第2行第5列单元格。

9、函数句柄

函数句柄是用于间接调用一个函数的Matlab值或数据类型。在调用其它函数时可以传递函数句柄,也可在数据结构中保存函数句柄备用。通过命令形式 fhandle = @functionname 可以创建函数句柄。例如 ,或匿名函数sqr = @(x) x.^2;。

使用句柄调用函数的形式是 fhandle(arg1, arg2, ..., argn) 或 fhandle()(无参数)。如:
trigFun(1)。例:

function x = plotFHandle(fhandle, data)
plot(data, fhandle(data))

plotFHandle(@sin, -pi:0.01:pi)

数据类型转换如C语言中的强制类型转换相似e.g.:

y=9;

z=double(y);

  matlab中的图像数据类型转换

matlab中读入图像的数据类型是uint8,而在矩阵中使用的数据类型是double因此 I2=im2double(I1)即为把图像数组I1转换成double精度类型;如果不转换,在对uint8进行加减时会产生溢出,可能提示的错误为:Function '*' is not defined for values of class 'uint8'。

   图像数据类型转换函数

默认情况下,matlab将图像中的数据存储为 double型,即64位浮点数;matlab还支持 无符号整型(uint8和uint16);uint型的优势在于节省空间, 涉及运算时要转换成double型im2double():将图像数组转换成double精度类型
     im2uint8():将图像数组转换成unit8类型
     im2uint16():将图像数组转换成unit16类型


读写二进制文件

我们读取和写入二进制文件的时候,首先需要打开和关闭文件,好比一个指针一样,只有打开了这个文件,才可以读取数据,打开和关闭函数分别是 fopen函数和fclose函数。

% 得到文件filename的指针
file_id=fopen(filename,'rb');

% 关闭文件指针
fclose(file_id); 

1)写二进制文件
fwrite函数按照指定的数据精度将矩阵中的元素写入到文件中。其调用格式为:
COUNT=fwrite(fid,A,precision)
说明:其中COUNT返回所写的数据元素个数(可缺省),fid为文件句柄,A用来存放写入文件的数据,precision代表数据精度,常用的数据精度有:char、uchar、int、long、float、double等。缺省数据精度为uchar,即无符号字符格式。
例: 将一个二进制矩阵存入磁盘文件中。

>> a=[1 2 3 4 5 6 7 8 9];
>> fid=fopen('d:\test.bin','wb')   %以二进制数据写入方式打开文件
fid =
  3           %其值大于0,表示打开成功
>> fwrite(fid,a,'double')
ans =
  9           %表示写入了9个数据
>> fclose(fid)
ans =        
  0           %表示关闭成功

2)读二进制文件
在得到指针后,就可以依次读取数据了,读取数据使用的函数是fread。fread函数可以读取二进制文件的数据,并将数据存入矩阵。其调用格式为:
[A,COUNT]=fread(fid,size,precision)
说明:其中A是用于存放读取数据的矩阵、COUNT是返回所读取的数据元素个数、fid为文件句柄、size为可选项,若不选用则读取整个文件内容;若选用则它的值可以是下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。precision用于控制所写数据的精度,其形式与fwrite函数相同。这里要注意的就是 precision这个参数,它实际上和读取二进制文件中的变量类型对应上的,比如当变量类型为整型时,就是用uint,如下面语句:

bargin.Time(i)=fread(file_id,1,'int64');
bargin.MilliSecond(i)=fread(file_id,1,'uint32');
bargin.Symbol(i,8)=fread(file_id,1,'schar'); 
bargin.Bid(i,:)=fread(file_id,10,'float64');
分别表示读取64位整数,32位无符号整数,字符,和64位浮点数,所以这里面一定要弄清楚,就是一定要对应上要读的数据的类型。



读写文本文件

1)读文本文件
fscanf函数可以读取文本文件的内容,并按指定格式存入矩阵。其调用格式为:
[A,COUNT]=fscanf(fid,format,size)
说明:其中A用来存放读取的数据,COUNT返回所读取的数据元素个数,fid为文件句柄,format用来控制读取的数据格式,由%加上格式符组成,常见的格式符有:d(整型)、f(浮点型)、s(字符串型)、c(字符型)等,在%与格式符之间还可以插入附加格式说明符,如数据宽度说明等。size为可选项,决定矩阵A中数据的排列形式,它可以取下列值:N(读取N个元素到一个列向量)、inf(读取整个文件)、[M,N](读数据到M×N的矩阵中,数据按列存放)。

另外有的txt文件还可以用load来打开
其语句为
f=load('fx.txt)


2)写文本文件
fprintf函数可以将数据按指定格式写入到文本文件中。其调用格式为:
fprintf(fid,format,A)
说明:fid为文件句柄,指定要写入数据的文件,format是用来控制所写数据格式的格式符,与fscanf函数相同,A是用来存放数据的矩阵。

例: 创建一个字符矩阵并存入磁盘,再读出赋值给另一个矩阵。

>> a='string';
% 写
>> fid=fopen('d:\char1.txt','a+'); % open or create file and append data to end of file
>> fprintf(fid,'%s',a);
>> fclose(fid);
% 读
>> fid1=fopen('d:\char1.txt','rt');
>> b=fscanf(fid1,'%s')
b =
string


写入文本换行

matlab关于文本文件的操作函数基本都是继承C语言的,但存在一些细微的差别。下面是写txt换行的实现方法。
方法一:
fid=fopen('filename.txt',' w');
fprintf(fid,'%d \r\n',a);
fclose(fid);

方法二:
fid=fopen('filename.txt',' wt'); %加t表示以文本文件模式(text mode)打开
fprintf(fid,'%d \n',a);
fclose(fid);
说明,关于换行符还与操作系统有关!


参考自:

读取二进制文件, http://www.matlabsky.com/thread-14396-1-1.html

MATLAB文件操作——二进制文件的读写, http://bbs.21ic.com/blog-592616-63312.html

matlab对文件目录路径的操作(转) http://blog.sciencenet.cn/blog-702148-569011.html

Matlab写文本txt换行 http://blog.163.com/wanglei2146073@126/blog/static/9068960720134307319575/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值