maltab 语言如何熟练掌握?
maltab 语言如何熟练掌握?
ytkz由来
我是研一接触的python,但是老实说,一直感觉编程是不得劲的,写代码有时候是云里来雾里去,没有悟到了精髓。2018年GEE大热,我跟风学了起来GEE,GEE说实在是一个平台、工具,用的JS语法,可是大部分时间在调API接口。2020年开始使用到matlab,慢慢的了解到cody,于是有了后面的故事。
CODY
CODY是Matlab官方社区的一个游戏活动平台,供大家分享问题,解决问题。通过解决问题提高MATLAB程序技能,学习他人代码思路和用法,“开阔眼界”, 也可以与志同道合的MATLAB爱好者一起以代码交流。
cody类似于leetcode,但是比leetcode容易很多,考验更多的是你是怎么实现具体的功能。
我的CODY经历
我在cody上做了100多道题,慢慢觉得编程很有趣。一开始是字符的处理,到后面关注的是矩阵的处理。有一道题是:均值滤波器是怎么实现的。
function B = med_filt(A)
%读取A的行列
[n1 m1]=size(A);
%创建与A大小一致的0矩阵
C=zeros(n1,m1);
%边缘使用0填充,填充第一行
A1=[C(1,:);A,];
%再次读取第一次填充A的行列
[n2 m2]=size(A1);
C1=zeros(n2,m2);
%边缘使用0填充,填充第一列,和最后一列
A2=[C1(:,1),A1,];
A2=[A2,C1(:,1)];
C2=zeros(n2,m2+2);
A3=[A2;C2(1,:)];
[n3 m3]=size(A3);
a=A3;
for i=2:n3-1
for j=2:m3-1
a1(i,j)=round((a(i-1,j-1)+a(i-1,j)+a(i-1,j+1)+a(i,j-1)+a(i,j)+a(i,j+1)+a(i+1,j-1)+a(i+1,j)+a(i+1,j+1))/9);
end
end
B = a1(2:n3-1,2:m3-1);
又比如下面的坐标划分,后面我改成了python,用在了遥感中的镶嵌、配准处理。
% Problem 223. Which quadrant?
% Given a complex number, output quadrant 'I' 'II' 'III' or 'IV'
%
% |
% II | I
% |
% -------+------- real
% |
% III | IV
% |
% imag
function y = your_fcn_name(x)
if (real(x)>0)
if imag(x)>0
y='I';
else
imag(x)<0
y='IV';
end
else
if imag(x)>0
y='II';
else
y='III';
end
end
关于矩阵切片,也是图片裁剪,这个代码很简单,但是很多地方都能用到,再把这个功能复杂些,加上循环,可以实现遥感图像的分块处理、深度学习前的预处理(分割为小图片)等等。记住:C++实现这个功能不使用OPENCV库的话,要使用双指针进行索引定位。python就直接用NUMPY就行了。
function Icrop = crop_image(I, Rmin, Cmin, Rpix, Cpix)
Icrop =I(Rmin:Rmin+Rpix-1,Cmin:Cmin+Cpix-1)
end
关于后来
后面重新学PYTHON,很多东西豁然开朗。
这两年,做项目的时候用过JAVA,感觉还OK;做过一个简单网站,学了DJANGO和MYSQL;业余时间做过一个小程序,顺便学了一下JS和MONGODB数据库;爬虫视频,然后学习利用ffmpeg进行批处理;自学了一下C语言,但是没用过C语言做什么东西。记住保持学习,记住遇到问题,多去google搜索;多去github看看别人写的项目和源码。
我还是觉得编程要管理好输入和输出,带着这样的思想去写代码,会容易入门一些。
当然,我的主业还是遥感,编写过一些与遥感相关的代码。现在我是一个水平很低的写代码的遥感从业人员。