精华内容
下载资源
问答
  • MATLAB的特色就是向量化的编程,所以有必要练习如何使用向量化编程,用一个小例子开始,例如下面的正弦函数求和运算,要求画出图像。 毋庸置疑,我们肯定可以使用循环等和其他语言一样的方法实现这个函数的求和运算...

    MATLAB的特色就是向量化的编程,所以有必要练习如何使用向量化编程,用一个小例子开始,例如下面的正弦函数求和运算,要求画出图像。

    b280408c821f5d659f38ee6fc04d8843.png

    毋庸置疑,我们肯定可以使用循环等和其他语言一样的方法实现这个函数的求和运算,但这体现不出MATLAB的特色,所以呢?我们来一起推导下,如何使用向量化的编程:

    3072a662e2bbc89709f663212354670c.png

    上面的手稿也可以看到了,式子(1)就很适合直接用MATLAB编程了,那么我们写出这个代码来,最后我们需要对结果进行转置下,因为我想得到的结果值是一个行向量:

    %try to use vector style to programming by using Matlab

    clc

    clear

    close all

    t = 0:0.01:1;

    k = 1:2:5;

    xt = sin(2*pi*t'*k)*(1./k');

    xt = xt';

    plot(t,xt);

    xlabel('t');

    ylabel('amplititude');

    b8987be40db1b83522e5ff373d2baa4c.png

    同样,我们也可以对式(1)两边同时转置:

    4f5d02b5ec383c611629489206bdb619.png

    这样对应的MATLAB代码为:

    %try to use vector style to programming by using Matlab

    clc

    clear

    close all

    t = 0:0.01:1;

    k = 1:2:5;

    xt = (1./k)*sin(2*pi*k'*t);

    plot(t,xt);

    xlabel('t');

    ylabel('amplititude');

    4694fe8a5010578ef130ad3f3f9e49ca.png

    最后,我给出使用循环语句实现这个例子的程序:

    clc

    clear

    close all

    t = 0:0.01:1;

    xt = zeros(1,length(t));

    for k = 1:2:5

    xt = xt + (1/k)*sin(2*pi*k*t);

    end

    plot(t,xt);

    xlabel('t');

    ylabel('amplititude');

    9fee0494a439eb0f98f66418e4333245.png

    结果都是一样的。

    本身暂时不涉及那种方式的优劣以及对于高效性的讨论。

    通过上述例子,我希望自己能一步一个脚印的去学会使用向量化编程。

    本文同步分享在 博客“李锐博恩”(CSDN)。

    如有侵权,请联系 support@oschina.cn 删除。

    本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

    展开全文
  • matlab笔记向量化编程002.docx 002MATLAB编程思想向量化编程C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。...

    41528d3028836879cd698677c3999917.gifmatlab笔记向量化编程002.docx

    002MATLAB编程思想向量化编程C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。而MATLAB是以向量、矩阵为基本元素的,所以要编写真正的MATLAB程序必须抛弃【C语言那种“单数值、元素化”考虑问题】的思路,转以向量、矩阵为最小单位来考虑问题。也就是说,MATLAB的编程思想是向量化编程,即面向向量或矩阵。这样做的好处,至少有两个(1)代码大大简化,易编程、清晰可读性强;这样的代码才叫MATLAB代码,否则只能是不伦不类的代码C不C,MATLAB不MATLAB(2)执行效率也更高;这是次要的,随着MATLAB对循环机制的优化,速度差异已不再那么明显,关键是(1)下面针对MATLAB中常见的向量化处理问题方法,举例加以说明(一)整体操作“大块数据”MATLAB为同型的数据块(向量或矩阵)的整体做运算提供了【点运算】,这里我借用线性代数里的说法,矩阵行数、列数相同称为同型矩阵,MATLAB里矩阵可能不止2维。比如,AC和A/C表示A与C的对应位置的各元素做和/运算得到与它们同型的一个新矩阵。例1物理实验利用测得的电压电流具体数据,验证欧姆定律RU/I代码1(C语言风格)U089,120,309,427,362,771,899,792,970,1041I0028,0040,0100,0145,0118,0258,0299,0257,0308,0345LLENGTHUS0FORK1LRKUK/IKSSRKENDRS/L运行结果R305247代码1’(MATLAB风格)U089,120,309,427,362,771,899,792,970,1041I0028,0040,0100,0145,0118,0258,0299,0257,0308,0345RU/IRMEANR运行结果R305247(二)尽量把【C语言风格的循环】向量化实现见上例,再比如,例2计算11/31/99代码2(C语言风格)S0FORK1299SS1/KENDS运行结果S29378代码2’(MATLAB风格)K1299SSUM1/K运行结果S29378注意代码2’中,不要写成“FORK1299”,否则K就是变化的一个数值而不是数组了。例3用间距为01的水平线和垂直线均匀分割X∈5,525,25的矩形域,在所有水平线和垂直线交点上计算函数ZSIN|XY|的值,并图示。(1)求出各网格点的函数值代码3(C语言风格)(注2)X5015Y250125 NLENGTHXMLENGTHYFORII1MFORJJ1NX0II,JJXJJY0II,JJYIIZ0II,JJSINABSXJJYIIENDEND代码3’(MATLAB风格)X,YMESHGRID5015,250125ZSINABSXY(2)画图SURFX,Y,Z画三维图形XLABEL X 标记坐标轴YLABEL Y SHADINGINTERP用插值处理色彩VIEW190,70旋转一定角度观看图形(三)尽量使用MATLAB现成的【矩阵操作语法和函数】MATLAB提供了大量非常便捷的矩阵操作语法和操作矩阵的函数,优先使用它们来完成程序。(1)操作矩阵的函数,比如MNSIZEA返回矩阵A的“型”,M行N列LENGTHA返回行数或列数中最大的那个MEANA返回A中所有元素平均值SUMA或SUMA,1返回A各列元素之和,各行之和用SUMA,2YIMAXAYA各列元素的最大值I各列最大值所在行SORTA矩阵各列按递增排序,递减排序加参数‘DESCEND’UNIQUEA返回矩阵A中不重复的值(去掉重复元素)等等这些函数已经实现了通常所需要的各种操作,所以完全没有必要再去按C语言的思路去自己重写代码。(2)矩阵操作语法,主要是“”的使用,放到下次再具体来说MATLAB学习系列3矩阵操作最后,习惯了C语言的思维,不是一下就能转变过来的,但要有意识地强迫自己写MATLAB风格的代码,写C语言风格代码不如不写。注1C语言循环和判断的机制是通用的,MATLAB里也有循环和判断,但是以向量或矩阵作为基本元素的循环和判断。注2写MATLAB循环代码时,尽量避免使用I和J,因为它俩是虚数单位(1开根号)。

    展开全文
  • 前言作者 Garrett Grolemund 将”利用...作者通过以下几个案例来阐述向量化编程预备知识rep() 函数格式: rep(c(-1, 1), 5000000)功能:接受某个值/向量以及次数,返回该值/向量的重复执行次数长度的更长的向量system.t...

    前言

    作者 Garrett Grolemund 将”利用 R 的三大法宝:

    逻辑判断

    取子集

    按元素方式执行

    来达到编写高效的代码的目的.

    这样的代码的特点是可以接受整个向量作为输入,并同时处理向量中的元素.

    作者通过以下几个案例来阐述向量化编程

    预备知识

    rep() 函数

    格式: rep(c(-1, 1), 5000000)

    功能:接受某个值/向量以及次数,返回该值/向量的重复执行次数长度的更长的向量

    system.time() 函数

    格式: system.time(function(object))

    功能:输入一个语句,返回执行该语句所耗费的时间.

    向量化代码

    向量化代码的定义

    可以接受一个含有多个值的向量作为输入,并且同时操作向量中的每一个元素

    如何编写向量化代码

    原则:

    尽量使用向量化的函数来完成任务:比如使用 R 库中的原函数

    对于重复的情况,使用逻辑值取子集的方法,而不是 for & if 的方法.

    方法一:使用向量化的函数/查找表

    程序①——未经向量化

    change_symbols

    for(i in 1:length(vec)){

    if(vec[i] == "DD"){

    vec[i]

    }else if(vec[i] == "C"){

    vec[i]

    }else if(vec[i] == "7"){

    vec[i]

    }else if(vec[i] == "B"){

    vec[i]

    }else if(vec[i] == "BB"){

    vec[i]

    }else if(vec[i] == "BBB"){

    vec[i]

    }else{

    vec[i]

    }

    }

    vec

    }

    程序②——向量化

    change_vec

    prob

    unname(prob[vec])

    }

    方法二:逻辑值取子集

    目的:一次性完成对一类情况中的所有元素的操作

    案例:

    程序①——未经向量化

    abs_loop

    for(i in 1:length(vec)){

    if(vec[i] < 0){

    vec[i]

    }

    }

    vec

    }

    程序②——向量化

    abs_set

    negs

    vec[negs]

    vec

    }

    未向量化的程序:

    if 语句一次只能针对一个元素进行判断,来判断出 vec 中为负数的元素

    向量化的程序:

    其中, vec < 0 为逻辑测试,返回一个包含 TRUE, FALSE 逻辑值的向量 negs, 通过逻辑值取子集的方法,得到 vec 中为负数的元素, 即 vec[negs].

    如何在 R 中编写出快速的 for 循环

    原则:

    能放在循环外的代码,就一定不要放在循环内

    确保用来储存循环输出结果的对象必须具备足够的容量,以容纳循环的结果

    范例:一个循环 1000000 次并赋值的 for 循环

    在 for 循环之前,定义好一个含有 1000000 个 NA 值的向量.

    在 for 循环之中, 对于对一个向量中的元素进行相应的操作.

    展开全文
  • 002. Matlab编程思想——向量化编程C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。而Matlab是以向量、矩阵为基本...

    002. Matlab编程思想——向量化编程

    C语言的基本元素是单数值(比如单变量或数组里的元素),再加上其结构化的特点,决定了通常C语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注1)。

    而Matlab是以向量、矩阵为基本元素的,所以要编写真正的Matlab程序必须抛弃【C语言那种“单数值、元素化”考虑问题】的思路,转以向量、矩阵为最小单位来考虑问题。也就是说,Matlab的编程思想是——向量化编程,即面向向量或矩阵。

    这样做的好处,至少有两个:

    (1) 代码大大简化,易编程、清晰可读性强;

    这样的代码才叫Matlab代码,否则只能是不伦不类的代码:C不C,Matlab不Matlab.

    (2) 执行效率也更高;

    这是次要的,随着Matlab对循环机制的优化,速度差异已不再那么明显,关键是(1)

    下面针对Matlab中常见的向量化处理问题方法,举例加以说明:

    (一)整体操作“大块数据”

    Matlab为同型的数据块(向量或矩阵)的整体做运算提供了【点运算】,这里我借用《线性代数》里的说法,矩阵行数、列数相同称为同型矩阵,Matlab里矩阵可能不止2维。

    比如,A.*C 和 A./C 表示A与C的对应位置的各元素做 * 和 / 运算得到与它们同型的一个新矩阵。

    例1. 物理实验利用测得的电压电流具体数据,验证欧姆定律R=U/I.

    代码1(C语言风格)

    U = [0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];

    I = [0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];

    L = length(U);

    S = 0;

    for k = 1:L

    R(k) = U(k)/I(k);

    S = S + R(k);

    end

    R = S/L

    运行结果:R = 30.5247

    代码1’(Matlab风格)

    U = [0.89, 1.20, 3.09, 4.27, 3.62, 7.71, 8.99, 7.92, 9.70, 10.41];

    I = [0.028, 0.040, 0.100, 0.145, 0.118, 0.258, 0.299, 0.257, 0.308, 0.345];

    R = U./I;

    R = mean(R)

    运行结果:R = 30.5247

    (二)尽量把【C语言风格的循环】向量化实现

    见上例,再比如,

    例2. 计算1 + 1/3 + … + 1/99

    代码2(C语言风格)

    s = 0;

    for k=1:2:99

    s = s + 1/k;

    end

    s

    运行结果:s = 2.9378

    代码2’(Matlab风格)

    k=1:2:99;

    s = sum(1./k)

    运行结果:s = 2.9378

    注意:代码2’中,不要写成 “for k=1:2:99”, 否则k就是变化的一个数值而不是数组了。

    例3. 用间距为0.1的水平线和垂直线均匀分割x∈[-5,5][-2.5,2.5]的矩形域,在所有水平线和垂直线交点上计算函数z=sin|xy|的值,并图示。

    (1)求出各网格点的函数值

    代码3(C语言风格)(注2)

    x=-5:0.1:5;

    y=(-2.5:0.1:2.5);

    N=length(x);

    M=length(y);

    for ii=1:M

    for jj=1:N

    X0(ii,jj)=x(jj);

    Y0(ii,jj)=y(ii);

    Z0(ii,jj)=sin(abs(x(jj)*y(ii)));

    end

    end

    代码3’(Matlab风格)

    [X,Y]=meshgrid(-5:0.1:5, -2.5:0.1:2.5);

    Z=sin(abs(X.*Y));

    (2)画图

    surf(X,Y,Z) % 画三维图形

    xlabel(x) % 标记坐标轴

    ylabel(y)

    shading interp % 用插值处理色彩

    view([190,70]) % 旋转一定角度观看图形

    (三)尽量使用Matlab现成的【矩阵操作语法和函数】

    Matlab提供了大量非常便捷的矩阵操作语法和操作矩阵的函数,优先使用它们来完成程序。

    (1)操作矩阵的函数,比如

    [m n]=size(A)——返回矩阵A的“型”,m行n列

    length(A)——返回行数或列数中最大的那个

    mean(A)——返回A中所有元素平均值

    sum(A)或sum(A,1)——返回A各列元素之和,各行之和用sum(A,2)

    [Y I] = max(A)——Y=A各列元素的最大值; I=各列最大值所在行

    sort(A)——矩阵各列按递增排序,递减排序加参数 ‘descend’

    unique(A)——返回矩阵A中不重复的值(去掉重复元素)

    等等………..这些函数已经实现了通常所需要的各种操作,所以完全没有必要再去按C语言的思路去自己重写代码。

    (2)矩阵操作语法,主要是 “:”的使用,放到下次再具体来说

    Matlab学习系列 (3)——矩阵操作

    最后,习惯了C语言的思维,不是一下就能转变过来的,但要有意识地强迫自己写Matlab风格的代码,写C语言风格代码不如不写。

    注1. C语言循环和判断的机制是通用的,Matlab里也有循环和判断,但是以向量或矩阵作为基本元素的循环和判断。

    注2. 写Matlab循环代码时,尽量避免使用i和j,因为它俩是虚数单位(-1开根号)。

    展开阅读全文

    展开全文
  • Matlab 编程思想——向量化编程C 语言的基本元素是单数值(比如单变量或数组里的元素) ,再加上其结构化的特点,决定了通常 C 语言程序大都充斥着大量罗嗦的单变量循环和判断语句(注 1)。而 Matlab 是以向量、矩阵为...
  • 《MATLAB向量化编程基础精讲》使用MATLAB新版本2016a,拣选Mathworks官方群组Cody中一些有趣的代码问题,分6章讲解这些优秀示例代码中使用数组、字符串操作、正则表达式以及匿名函数等方面的MATLAB编程技巧,并对...
  • 我们知道,MATLAB编程核心思想之一就是向量化。MATLAB的很多built-in函数,向sin,cos,find等等都支持向量运算。但是,很多时候我们编写的函数的输入变量是标量,而我们又要对很多组参数进行函数调用,MATLAB7以前的...
  • Python编程的基本单位是标量,但是Python也可以向量化编程,需要借助第三方库,numpy,pandas,数据展示需要用到matplotlib.pyplot,语法的书写和R语言特别相似 结果中可以看到,R语言和Python中基本相同的代码来...
  • nbspmatlab刚架单元的Matlab向量化编程方法.pdf4页本文档一共被下载:次,您可全文免费在线阅读后下载本文档。 下载提示1.本站不保证该用户上传的文档完整性,不预览、不比对内容而直接下载产生的反悔问题本站不予...
  • 矩阵向量化运算

    2021-05-03 06:33:46
    定理 6 设 AXB可乘,则有 AXB 0, X A 0或B 0 定理 7 设 x' Ay 0,x,y A 0 定理 6 和定理 7 的证明可按矩阵向量化运算进行(Kronecker 积). .. . §3 Am 与相容线性方程组的极小范数解定义 1 设 A Rmn ,称......1)生成四...
  • 来自重庆帕斯亚科技的CTO谢怡欣先生,分享了他对于向量化编程的一些看法。以下是分享视频和文字实录: 大家好,我是来自重庆帕斯亚科技的谢怡欣。 首先,我想向大家简单介绍一下我的经历。之前我在加拿大温哥华工作...
  • MatLab-向量化技巧

    2021-04-21 21:35:46
    《MatLab-向量化技巧》由会员分享,可在线阅读,更多相关《MatLab-向量化技巧(10页珍藏版)》请在人人文库网上搜索。1、MatLab 向量化技巧家家 2007-05-17 13:53大家都知道MatLab是一种解释性语言,它的长处在矩阵...
  • 本帖最后由 winner245 于 2015-7-17 12:26 编辑关于单个函数向量化积分的探讨winner245向量化积分简介给定一个函数f,我们可能需要计算一系列定积分。比如,i)求解一个带参数函数f(x,t),x为自变量,t为参数,在M个...
  • 所以,基本上,你希望你的代码运行更快。 JNI是答案。我知道你说这不适合你,但让我告诉你,你错了。这里是Dot.java:import java.nio.FloatBuffer;import org.bytedeco.javacpp.*;import org.bytedeco.javacpp....
  • Java 自动向量化

    2021-06-22 15:43:46
    向量化可以由程序员完成,或者向量化的可能性可以由编译器自动实现。在后一种情况下,它称为自动向量化。 Auto vectorization is a kind of code optimization which is done by a compiler, either by an AOT ...
  • 机器学习代码实战

    2021-03-22 13:56:11
    向量化计算 我们的迭代公式每次只求出一个参数的更新值,向量化计算是为了使计算更加快捷,使用向量运算的方式计算梯度与新的参数,每一次迭代,可以求出所有新参数值。 对于向量化计算,最小二乘法核心公式不变,...
  • ClickHouse在计算层做了非常细致的工作,竭尽所能榨干硬件能力,提升查询速度。它实现了单机多核并行、分布式计算、向量化执行与SIMD指令、代码生成等多种重要技术。多核并行ClickH...
  • MATLAB-向量相关计算

    2021-07-12 20:43:28
    MATLAB 向量类型: 行向量向量 MATLAB 行向量: 创建行向量括在方括号中的元素的集合,用空格或逗号分隔的元素。 r = [7 8 9 10 11] 执行上述语句,返回下述结果: r = 7 8 9 10 MATLAB 列...
  • 要学习Java编程开发中向量及其应用方面的知识就要先了解什么是向量向量是如何声明及初始的,下面就让IT培训网专家来给大家详细介绍下如何认识向量及其使用方法吧!关于向量的介绍:向量 vector 是一种对象实体, ...
  • 我正在构建一个新函数来从文件导入数据。我正在构建我自己的,这样它就可以使用与loadtxt()相同的通用函数调用,...我想尝试这种矢量的想法,但如果有更好的方法来打破数据,同时尽量减少内存使用,我是开放的。在
  • 三、数组编程 1、将条件逻辑作为数组操作 where() xarr=np.array([1.1,1.2,1.3,1.4,1.5]) yarr=np.array([2.1,2.2,2.3,2.4,2.5]) cond=np.array([True,False,True,True,False]) #是否是x的值 result=np.where...
  • 数组运算数组运算符对数据集中的所有元素执行相同的运算。这些类型的运算用于重复计算。例如,假设您通过记录各圆锥体的直径 (D) 和高度 (H) ...向量 D 和 H 均包含 10,000 个元素,并且您需要计算 10,000 个体积。...
  • 向量化是非常基础的去除代码中for循环的艺术,在深度学习安全领域、深度学习实践中,你会经常发现自己训练大数据集,因为深度学习算法处理大数据集效果很棒,所以代码的运行速度非常重要。否则在数据集很大时,代码...
  • 11月6日本周六,StarRocks Hacker Meetup迎来了第一期:向量化编程的精髓。 打造一个极速的 OLAP 数据库有哪些关键点?如何进行 SIMD 编程?如何实现数据库的向量化?如何进行性能分析与优化?国内一线互联网大厂在...
  • 吴恩达《神经网络和深度学习》课程作业—numpy入门,函数向量化实现1 使用numpy构建基本函数1.1 sigmoid function和np.exp()1.2 Sigmoid gradient1.3 重塑数组1.4 行标准化1.5 广播和softmax函数2 向量化2.1 向量和...
  • 在“国产数据库硬核技术沙龙-TDSQL-A技术揭秘”系列分享中,5位腾讯云技术大咖分别从整体技术架构、列式存储及相关执行优化、集群数据交互总线、Fragment执行框架/查询分片策略/子查询框架以及向量化执行引擎等多方...
  • 我们都知道向量化的数组操作比纯Python的等价实现在速度这一方面快很多,至于多少(一到两个数量级)甚至更多,生活需要慢节奏,但是计算就不可以了,掌握高效的计算模型,可以让数据分析如虎添翼! 简单例子 我们...
  • 这是 Python 进阶课的第十五节- 量化交易之向量化回测,进阶课的目录如下:NumPy上NumPy 下Pandas 上Pandas下SciPy 上SciPy 下Pandas 时...
  • 本节课我们将来探讨Python和向量化的相关知识。 1. Vectorization 深度学习算法中,数据量很大,在程序中应该尽量减少使用循环语句,而可以使用向量运算来提高程序运行速度。 向量化(Vectorization)就是利用...
  • 机器学习入门~向量化

    2021-01-20 22:26:12
    向量化 无论使用哪门编程语言,使用该编程语言内置的函数总要比自己手写的函数快很多,如Octave中直接对矩阵A和B进行A*B即可实现矩阵乘法,且效率比自己手写高得多。故,倘若能将数据简化,并应用于内置函数中,则可...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 78,560
精华内容 31,424
关键字:

向量化编程