【萌新小本本】MATLAB

文章目录

  • 对图片数据的操作
  • 对字符串的操作
  • 对矩阵的操作
  • 对文件(夹)的操作
  • 对csv文件操作
  • 对txt文本操作
  • 随机数
  • 神奇函数 find()


对图片数据的操作

@ 需求一:读取/显示图片

% 读取图片
img = imread('cat.jpg');
% 显示图片
imshow(img);

对字符串的操作

@ 需求一:连接多个字符串

% 连接两个字符串
方法一: c = [a, b]
方法二: c = strcat(a, b)

% 连接多个字符串
d = sprintf('%s,%d,%s', a, b, c)

@ 需求二:查找/删除特定字符串

strrep:查找并替换子字符串

%str 中的 old 替换为 new
newStr = strrep(str,old,new)

删除只需要用空字符替换即可,即把第三个参数设置为空字符:''


对矩阵的操作

@ 需求一:在矩阵中查找特定元素

(1) 查找满足条件的元素,返回一个 0-1 矩阵

M = (A > 0)

返回和矩阵 A 形状相同的 0-1 矩阵 M,其中满足条件的元素为 1,反之为 0。

(2) 查找满足条件的元素,返回元素位置(单下标)

1. t = find(A > 0)
2. t' = (find(A > 0))'

t:返回为 n 行 1 列
t‘:想要保存为 1 行 n 列转置一下就好啦~

注意:这里返回的是单下标,下标是按列数的

(3) 查找满足条件的元素,返回元素位置(双下标)

[i, j] = find(A==0);
disp(ii');
disp(jj');

@ 需求二:将矩阵中满足条件的元素替换掉

A(s) = 0

将 A 矩阵 s 位置的元素都替换为 0

@ 需求三:求矩阵中某一个值的个数

1. sum(A(:)==a);

2. length(find(A==a));

3. logical = (A=a);
   sum(logical(:));

对文件(夹)的操作

@ 需求一:读取某文件夹下的内容

% 读取文件夹下的所有内容
D = dir('folder_name')

dir 返回一个结构数组,包含了文件夹 folder_name 下的子文件夹和子文件的一些信息,结构数组中第 1 个成员 name 是文件名,第 4 个成员 isdir 表示是否为文件夹。

注意:结构体第 1 个数组元素和第 2 个数组元素分别是 ...,表示 当前目录上层目录。所以如果需要求文件夹中子文件的个数,需要给长度减去 2。

% 读取文件夹下指定后缀的所有文件
D = dir('folder_name\*.png');  % 方法一
D = dir(strcat(path, '\', '*.png'));  % 方法二

@ 需求二:获取某文件夹下的文件个数

(1) 直接获取文件夹下子文件个数,但是要记得减去 2

D = dir('folder_name');
len = length(D)-2;

(2) 如果只需要获取某一后缀或文件名中包含某一特定字符的文件个数,可以在 dir 内进行指定,此时就不用再减 2 了

D = dir(sprintf('%s\\*.png', folder_name));
len = length(D);

这里指定了获取 folder_name 文件夹下所有后缀为 .png 的文件个数。

@ 需求三:读写某文件内容

# 第一步当然是打开想操作的文件了
fid = fopen(file_name,‘打开方式’)

fid 存储文件句柄值,如果 fid > 0,则说明文件打开成功。

打开方式有如下选择:

  • ‘r’:只读方式打开文件(默认),文件必须已存在;
  • ‘r+’:读写方式打开文件,打开后先读后写,文件必须已存在;
  • ‘w’:打开后写入数据,文件已存在则更新,不存在则创建;
  • ‘w+’:读写方式打开文件,先读后写,文件已存在则更新,不存在则创建;
  • ‘a’:在打开的文件末端添加数据,文件不存在则创建;
  • ‘a+’:打开文件后,先读入数据再添加数据,文件不存在则创建。

另外,在这些字符串后添加一个t,如 ‘rt’‘wt+’,表示将该文件以文本方式打开;如果添加的是 b,则以二进制格式打开(默认)。

(1) 基本的写入方法

fid = fopen('info.txt', 'w');             # 打开文件
fprintf(fid, '%d \r\n', number);          # 写入 number
fclose(fid);                              # 关闭文件
  • \r\n 的作用相当于键盘的 Enter 键,换行并回到行开头
  • 输出函数第一个位置放句柄 fid,表示要向这个文件里写内容
  • 在最后要记得关闭文件
  • 另外要向文件中打 Tab,可以在需要的位置加 \t

关于打开方式 ‘a’'w'

‘a’ 代表后续写入,这样每次重新运行程序不会替换之前保存的数据,只是接着之前的数据向后继续添加新的内容;
‘w’ 代表写入,它每写一次数据都会覆盖之前的数据,最后会发现目标文件里面只保存了一次运行的数据内容。

(2) 向打开的文件写入一个矩阵

fid = fopen('info.txt', 'w');
[r,c]=size(matrix);
for i = 1:r
	for j = 1:c
		fprintf(fid,'%5f\t',matrix(i,j));
	end
	fprintf(fid,'\r\n');
end
fclose(fid);   

@ 需求四:将文件保存在指定目录下

直接用前面的方法 MATLAB 会将我写的文件保存在当前目录下,要指定保存目录很简单,只要在文件名前加上路径就好啦

fid = fopen('D:\data\info.txt', 'w');  
fprintf(fid,'%d \r\n', number);

@ 需求五:利用循环向文件写入字符串

strings = {'R','G','B'};  

fid = fopen('info.txt', 'w');
for n = 1:3
	fprintf(fid, '%s\t', char(strings{n}));
end
fprintf(fid,'\r\n');
fclose(fid);

最后记得关闭文件:fclose

@ 需求六:查找文件中的关键字并提取关键字后的数据

feof(fid):文件指针 fid 到达文件末尾时返回“真”值;否则返回“假”;
~feof 是在 feof 前加了“非”,是逻辑表达式:文件指针到达文件末尾时 该表达式值为“假”;否则为“真”;
while ~feof 表示 若 未读到文件末尾 则 继续 循环
while feof 表示 若 未读到文件末尾 则 终止 循环,所以只循环一次就终止了

fgetl:读取文件中的行,并删除换行符
strtok:所选的字符串部分
strfind:在一个字符串内查找另一个字符串

@ 需求七:批量重命名文件

for i = 0:test_num-1
    out_path = sprintf('E:\\data\\prostate\\_prostate\\experiment\\DEXTR\\exp\\exp%d\\test\\epoch%d\\%d\\mask\\result_795', id, epoch, i);
    out_file = dir(sprintf('%s\\*.png', out_path));
    for j = 1:len
        oldname = out_file(j).name;
        oldname = [out_path '\' oldname];
        newname = N(j,1);
        newname = newname{1};
        eval(['!rename' 32 oldname 32 newname]);  
    end
    fprintf('noise i is Done.. \n');

对csv文件操作

读取 csv 文件
直接将 csv 文件全部读入,保存在一个矩阵中:

% 保存在矩阵f中

filename = 'info.csv';
f = csvread(filename);

对txt文本操作

data = importdata('data.txt')

data 是一个结构数组,保存了 data.txt 文本文档里的内容

[a,b,c,d] = textread('data.txt','%2s %.3f %.3f %.3f');

这个可指定每部分输出内容的格式


随机数

需求:随机生成固定范围内的一些整数

randperm:随机置换

# 随机生成1~3000范围内的100个整数
r = randperm(3000, 100);

需求:为了便于调试程序,要求每次生成的随机数一样

# 设定随机数种子seed,具体数字可以改
rand('seed', 0);

神奇函数 find()

参考:https://www.cnblogs.com/anzhiwu815/p/5907033.html

你可能感兴趣的:(#,MATLAB,编程记录)