matlab常用操作

文件读写、矩阵操作、信号处理

Posted by LT on May 9, 2019

一、写文件

  1. 效果和矩阵x一样(最佳) dlmwrite('lll.txt', x, 'delimiter', ' ', 'newline', 'pc');
  2. 适合一维数据存储 % csvwrite('lll.txt', x);
  3. 科学记数法 save('lll.txt','x','-ascii');
  4. 原始方式(和C相比,更方便地写一维数据) fid = fopen('n_msg_bits.txt','w'); fprintf (fid,'%d ',n_msg_bits); fclose (fid);
  5. 以二进制方式写入文本
    frr = fopen('extr_msg.txt', 'a' ) ;       
    fwrite(frr, extr_msg, 'ubit1') ;	% extr_msg是0/1数组
    fclose(frr);
    

二、读文件

  1. %多种分隔符读取数字 y = load('lll.txt');
  2. 以二进制方式读取文本
    f_id = fopen( 'msg.txt', "r") ; 
    [msg,len] = fread( f_id, 'ubit1');
    msg = uint8(msg)';
    fclose(f_id);
    

三、数组元素替换

对于a=[12 4 5 6 0 12 0];

  1. b=find(a==0);b=logical(a==0); a(b)=8;
  2. a(a==0)=8;
  3. 替换NaN:isnan(a)代替方法1中的find(a==x); 注:以上方法仅适用于普通矩阵,不适用于元胞数组

四、矩阵操作

  1. 一维->二维,dlmwrite以矩阵形式保存
     a=[1,2,3,4,5,6,7,8,9,10];
     a = reshape(a,[2,5])'  % 一维->二维 得到(5,2)
     size(a)
     dlmwrite('aaaa.txt', a, 'delimiter',' ');  
    
  2. 一些element-wise操作
     a = a(:,1:5)
     b = zeros(1,3);
     a = [a, b]
     len = size(c,2);
     cover = 1-cover 
     cover = cover';
     cover = cover(:)';
     cover = cover ./ 2;
     cover = log(9 ./cover - 1);
     cover_len = 10
     costs = zeros(3, cover_len, 'single');
     costs(3,:) = rou
    
  3. 其他
     clc;    %清屏
     x = [ 1 2 3;
         4 5 6 ;
         7 8 9 ];
     costs([1 3],1:n) = x([2 3],1:n);    % 用x的2、3行,1到n列来替换costs的1、3行,1到n列。
     S4_1 = S4(1:159,:);
     S4_1 = fliplr(S4_1);    %倒序(注意不是从大到小,只是反转原来的顺序)
     S4_2 = S4(160:1000,:);
     S4 = [S4_1;S4_2];    %行拼接
     S4 = [S4_1,S4_2];    %列拼接
     S = S'; %转置
     S = string(S);  %转化为字符串
     S = cellstr(S); %转化为元胞数组
     rd = randperm(N); % 生成1到N随机数(闭区间)
     B = B(~ismember(B,b));  % B中去掉b元素
     msg = uint8(unifrnd(0,1,[1,m]));        % generate m random message bits
    

五、检查是哪一个文件不存在

% fileFolder=fullfile('本机文件夹路径');
% dirOutput=dir(fullfile(fileFolder,'*.aac'));
% fileNames={dirOutput.name};
addpath('文件夹所在的全路径');
for i=1:1000   
    str_i = num2str(i); %数字转字符
    stego_name = strcat(str_i,'-Tf-128.wav');   %字符串拼接
    print(stego_name);
end

注意:适用于命名有规律的文件

六、批量裁剪图像

  • 转自这里(比格式工厂、PS什么的方便的多!)
    file_path = 'D:\goland\PyCharm project\HiDDeN-master\data\裁剪前\'; % 设定你存放图片的目录
    img_path_list = dir(strcat(file_path, '*.jpg')); % 选后缀为 .jpg 的图片
    img_num = length(img_path_list); %获得图片数量
    for j = 1:img_num 
      image_name = img_path_list(j).name;
      image = imread(strcat(file_path, image_name));
      crop_image = imcrop(image, [0,0,128,128]);
      % imcrop() 函数第二个参数的格式为[XMIN YMIN WIDTH HEIGHT]
      % 裁剪方式是:指定左上角、需要裁剪的宽和高
      imwrite(crop_image, strcat('D:\goland\PyCharm project\HiDDeN-master\data\裁剪后\', image_name)); % 保存文件
    end
    

七、读取音频

[y,Fs] = audioread(filename) 从名为 filename 的文件中读取数据,并返回样本数据y(单声道y是一列,双声道则是2列)以及该数据的采样率Fs。

八、.m –> .exe

mcc -m [文件名]

九、类型转换

  1. 字符串->浮点数 d = str2double(input); 例如:
     function lt_tests(input)
         clc;
         d = str2double(input);  % 字符串->整数
         e = 1/d;
         fprintf('%f',e);
     end
    

十、对比两个数组是否相同

  1. 方法1,if all(array1==array2)
     a=[1,2,3,4,5,6,7,8,9,10];
     b=[1,2,3,4,5,6,7,8,9,10];
    
     if all(a==b)
         fprintf('success');
     else
         fprintf('fail');
     end
    
  2. 方法2
     i = 1; 
     while i <= 10 && a1(i)==a2(i)
         i=i+1;
     end
        
     if i ~=11
         fprintf('fail');
     else
         fprintf('success');
     end
    

十一、绘图

  1. 3D
     [X,Y] = meshgrid(-2:.1:2, -4:.2:4);  % 0.1 0.2控制网格的稀疏
     Z = X .* exp(-X.^2 - Y.^2);
     mesh(X,Y,Z)
    

十二、处理图像

a = imread('D:\2-代码工程\PycharmProjects\GLOW\BOSSbase_1.01\1.pgm');
imshow(a);
fprintf = ("%d",var);

其他

  1. 随机序列生成 ` msg = uint8(rand(1,m)); % 随机消息`
  2. 将特定变量保存为.mat。加载.mat。
     save msg.mat msg
     load msg;
    
  3. 积分 trapz( X, Y ); % X 是 横坐标,Y是 对应的函数值

  4. 按 第column列的升序 对 A 的行进行排序。 B = sortrows(A) B = sortrows(A,column)

  5. 删除 窗口绘图
    • clf(figure(1)) % 窗口还在,图形+坐标系,都没了。
    • delete(figure(1)) % 窗口 直接关闭了