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),也可以将二维矩阵转化为一维数组
应该是你之前用了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
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);