maltab 语言如何熟练掌握?

由来

我是研一接触的python,但是老实说,一直感觉编程是不得劲的,写代码有时候是云里来雾里去,没有悟到了精髓。2018年GEE大热,我跟风学了起来GEE,GEE说实在是一个平台、工具,用的JS语法,可是大部分时间在调API接口。2020年开始使用到matlab,慢慢的了解到cody,于是有了后面的故事。

CODY

CODY是Matlab官方社区的一个游戏活动平台,供大家分享问题,解决问题。通过解决问题提高MATLAB程序技能,学习他人代码思路和用法,“开阔眼界”, 也可以与志同道合的MATLAB爱好者一起以代码交流。

cody类似于leetcode,但是比leetcode容易很多,考验更多的是你是怎么实现具体的功能。

我的CODY经历

微信截图_20221119205453

我在cody上做了100多道题,慢慢觉得编程很有趣。一开始是字符的处理,到后面关注的是矩阵的处理。有一道题是:均值滤波器是怎么实现的。

cody

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,用在了遥感中的镶嵌、配准处理。

cody3

% 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就行了。

cody2

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看看别人写的项目和源码。

我还是觉得编程要管理好输入和输出,带着这样的思想去写代码,会容易入门一些。

当然,我的主业还是遥感,编写过一些与遥感相关的代码。现在我是一个水平很低的写代码的遥感从业人员。