MATLAB学习日记

4.18

a=sum(A)  %列求和

%行求和b=sum(A,2)

c=sum(A(:)) %矩阵求和

假定A为一个矩阵:

sum(A)以矩阵A的每一列为对象,对一列内的数字求和。

sum(A,2)以矩阵A的每一行为对象,对一行内的数字求和。

sum(A,3)求和

假设A为三通道图像,则sum(A,3)运算后的值为每个通道对应位置~的值各自相加,比如在位置p三通道像素值分别为r,g,b,则在p位置运算后的值为r+g+b,具体看下面的代码

A=[1 2 3;4 5 6;7 8 9]  
A =  
  
     1     2     3  
     4     5     6  
     7     8     9
>> bb=repmat(A,[1 1 3])  %%是一个处理大矩阵且内容有重复时使用,其功能是以A的内容堆叠在(MxN)的矩阵B中,B矩阵的大小由MxN及A矩阵的内容决定,如果A是一个3x4x5的矩阵,有B = repmat(A,2,3)则最后的矩阵是6x12x5
bb(:,:,1) =  
  
     1     2     3  
     4     5     6  
     7     8     9  
bb(:,:,2) =  
  
     1     2     3  
     4     5     6  
     7     8     9  
bb(:,:,3) =  
  
     1     2     3  
     4     5     6  
     7     8     9 
>> cc=sum(bb,3)  
cc =  
  
     3     6     9  
    12    15    18  
    21    24    27

4.22

matlab把矩阵变成数组

1.

第一步打开matlab,输入a=[1 2 3;2 4 5;6 7 8],创建一个3行3列的a矩阵,

2.

第二步输入a(:),将二维矩阵转化为一维数组,

3.

第三步按回车键之后,可以看到成功转化成一维数组了,

4.

第四步输入reshape(a,[],1),也可以将二维矩阵转化为一维数组

为什么matlab运行不成只显示文件名? 

应该是你之前用了ctrl+c复制了代码。在命令窗口点一下,然后按ctrl c,是不是就出现>>了?这时就可以运行了:)

4.23

matlab如何在循环中修改变量名称并再次使用?《未弄清楚》

可以用字符串拼接,例如J(1+i),里面是i是数值型,可以先转换为字符串,然后拼接。

J(1+i)可以这样写:['J(',num2str(1+i),')']

例如,当i=1时, ['J(1',num2str(1+1),')']则为J(2)

clc
clear
b=zeros(100,40,50);
for n=1:10
eval([‘a’,num2str(n),’=’,’b(n:10:100,:,:)’,’;’]);      ?????
end

结果如下:
结果

  

《未弄清楚》

   % %     for iii=1:r
% %     lonlat=outrc(iii,:);      %不是(:;1); outrc(:,1)提取第一列  (a,b) a是行
%     for ii = 1:r  %%%循环出来是矩阵不是数组
%         for iii =1:c
%             idx(ii);idy(iii);
% %         preclonlat = prec(idx(c),idy(r),:)  %%%提取出来是矩阵不是数组                                                                                                                                              ;
% %       temp2(k,:)=reshape(a,1,length(a)); %????reshape(X,M,N,P)也就是把X改写成MXN(行 列)个单独的矩阵,而此时这样的矩阵恰好为P个
% %         
%     end

5

database表和输出命令行的区别   有科学计数法 e+

是否要声明函数变量(问题未解决)

正在上传…重新上传取消正在上传…重新上传取消

4.24

如何在 matlab 和 excel间进行数据导入导出?
 
excel-->matlab 数据读取:
A = xlsread('Excel路径+Excel的名称','工作表名称')

例子:

A = xlsread('创新班.xlsx','Sheet2')

A = xlsread('创新班.xlsx','Sheet2','a1:c1') %读取a1 b1 c1的数据
 

不写工作表名称,默认是第一个。

 matlab-->excel 数据写入
xlswrite('Excel路径+Excel的名称','需要输出的矩阵名称','工作表名称')

例子:

test = [1 2 3;4 5 6;7 8 9;10 11 12];

xlswrite('test.xlsx',test,'Sheet2')
 

 1 angle = [-180 -165 -150 -135 -120 -105 -90 -75 -60 -45 -30 -15 0 15 30 45 60 75 90 105 120 135 150 165 180];
 2 
 3 CFX = [0.043011 0.055914 0.11613 0.24086 0.42581 0.62366 0.75699 0.7914 0.64946 0.4172 0.20215 0.08172 0.060215 0.13763 0.33978 0.61935 0.84301 0.96344 0.94194 0.84301 0.65806 0.44731 0.19355 0.055914 0.043011];
 4 
 5 CFY = [0.14383 0.083721 0.015027 -0.092308 -0.13524 -0.096601 0.01932 0.18247 0.25975 0.20823 0.045081 -0.10089 -0.19964 -0.74919 -0.80072 -0.71055 -0.5517 -0.28122 -0.015027 0.22111 0.38426 0.46583 0.44866 0.3585 0.14812];
 6 
 7 CMZ = [0.030108 0.056344 0.07957 0.083441 0.073118 0.054624 0.027527 -0.018495 -0.068387 -0.10495 -0.11183 -0.083871 -0.045161 0.037849 0.076989 0.04172 0.025376 0.0086022 0 -0.008172 -0.014624 -0.020645 -0.055484 -0.027097 0.030108];
 8 
 9 data = [angle', CFX', CFY', CMZ'];                   % 将数据组集到data
10 [m, n] = size(data);            
11 data_cell = mat2cell(data, ones(m,1), ones(n,1));    % 将data切割成m*n的cell矩阵
12 title = {'angle', 'CFX', 'CFY', 'CMZ'};              % 添加变量名称
13 result = [title; data_cell];                        % 将变量名称和数值组集到result
14 s = xlswrite('wind.xls', result);                    % 将result写入到wind.xls文件中

————————————————

4.27

Cannot display summaries of variables with more than 524288 elements.

不能显示包含超过524288个元素的变量的摘要。

4.29

>> ncdisp
Attempt to execute SCRIPT ncdisp as a function:

解决方法:文件和函数名同名

Error using ncread (line 56)
Not enough input arguments.

Error in ncdisp (line 8)
ncread('E:\ANCEP\China meteorological forcing data\Data_forcing_clim_010deg 197901-201812-moltm
有降水\prec_CMFD_V0106_B-01_01mo_010deg_197901-201812-moltm.nc');

解决方法:

5.1

读取excel特定行列数据

% [x,y] = xlsread('E:\ANCEP\China meteorological forcing data\test\贵州站点.xlsx','D2:D78','E2:E78');

未解决读不出来(用一个参数?)


zdx = xlsread('E:\ANCEP\China meteorological forcing data\test\贵州站点.xlsx','D2:D78');
zdy = xlsread('E:\ANCEP\China meteorological forcing data\test\贵州站点.xlsx','E2:E78');

三维数据在第三维乘以3

 prec1 = prec(idx_lon,idx_lat,[1:240])*3; % prec = prec(idx_lat,idx_lon,:);空值
prec2 = prec(idx_lon,idx_lat,[241:480])*3;

5.8

1.报错  未解决

Subscript indices must either be real positive integers or logicals.

Error in t01hhhr (line 35)
    dir_filename = strcat(filepath,filelist(i).name);

filepath='D:\PPrec\';
% filename ='prec_ITPCAS-CMFD_V0106_B-01_03hr_010deg_*.nc';   %如何循环
filename ='*.nc';   %如何循环
filelist=dir(strcat(filepath,filename)); %dir放在一种文件结构体数组,strcat函数字符串相加
LengthFile=length(filelist);%求最大数组维度的长度  求有多少列

for iii = 1:length(filelist)    %月循环
    dir_filename = strcat(filepath,filelist(i).name);
    time=ncread(dir_filename,'time');   %月中三小时读取
    prec=ncread(dir_filename,'prec');

可运行

ncpath = 'D:\PPrec\';
FileList = dir( [ncpath, '*.nc']);
len = length(FileList);
% for iii =  1:len
iii=1;
    year0 = str2num(FileList(iii).name(41:44));
    month0 = str2num(FileList(iii).name(45:46));
    filename =FileList(iii,1).name; 
    dir_filename  = [ncpath filename]; 

2.多路分支结构

3.自加 未应用

%              hhr=hhr+timer;

4.matab输出ans=1    未解决

ans是matlab中默认的结果变量. 每次matlab进行运算后, 结果都要储存在指定的变量中. 如果你只是输入表 达式, 却不指定把表达式的运算结果储存在那个变量里面, 那么matlab就自 动地将结果储存在ans变量中.直到下一次不带指定存储变量的运算结束前, ans中 所储存的值不变

5.9 

1.存储加载mat文件

save precc(变量表名).mat;

load  ('3B42.201807.mat');

5.10

1.Matlab中关于.* 和 *以及.^ 和 ^的区别

1:.* 和 *的区别

  • .* 即为矩阵中对应元素的相乘,即原始位置 x 原始位置。
  • 而 * 即为普通的矩阵运算,第一个矩阵的行和第二个矩阵的列中的元素逐一相乘求和。
  • 2:.^ 和 ^的区别
  • .^即为对对应元素求2次方,即原始位置上的指数运算。
  • ^即为矩阵的指数运算,需要遵循矩阵的乘法法则。
  • Error using  ^ 
    Inputs must be a scalar and a square matrix.
    To compute elementwise POWER, use POWER (.^) instead.

    Error in duqu (line 17)
            dist(i,j) = (lon(i)-lon0)^2+(lat(j)-lat0)^2;

2.只取多维数的某一维数

随机生成一个三维矩阵a:

 >> a=rand(2,3,4)
直接索引坐标(1,1)会得到

>> b=a(1,1,:)
使用squeeze函数:

>> c=squeeze(b)

3.[]与:

reshape(repmat(1:31,8,1),[],1)'
lat=reshape(latt,:,1);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值