如我们想验证:

∑nxnxTn=XXT

\sum_nx_nx_n^T=XX^T
其中 xn,n=1,…,Nx_n,n=1,\ldots,N分别表示 XX的每一列

% 循环的做法
T = zeros(size(X));
for i = 1:size(X, 2),T = T+X(:, i)*X(:, i)';
end
% 矩阵运算的做法
i = 1:size(X, 2);
X(:, i)*X(:, i)'

1. 避免使用判断,避免使用循环

gσ(x)=⎧⎩⎨12[1−(x/σ)2]2,0,|x|≤σotherwise

g_\sigma(x)=\left \{ \begin{array}{ll} \frac12[1-(x/\sigma)^2]^2,&|x|\leq\sigma\\ 0,&\textrm{otherwise} \end{array} \right.

x = -5:.001:5;
sigma = 0.75;
y = zeros(size(x));
y = (1-(x/sigma).^2).^2/2;
y(abs(x)>sigma)=0;
plot(x, y)

matlab有强大的布尔索引,python还有强大的list comprehension呢,虽然接下来的python代码并未使用list comprehension,这里只是想说,语言的存在是有其存在的合理性的,大家各有其适定的场所:

import numpy as np
import matplotlib.pyplot as plts = .75
x = np.arange(-5, 5, .001)
y = np.where(abs(x) < s, (1-(x/s)**2)**2/2, 0)
plt.plot(x, y, c='r', lw=2)
plt.show()

2. 创建对角对阵

根据向量创建对角矩阵:

>> diag([1/2 1/3 1/4])
ans =0.5000         0         00    0.3333         00         0    0.2500

diag有多份重载,

  • (1)根据一维向量创建对角矩阵
  • (2)提取矩阵的对角线元素为一维向量(列向量)

3. 找不同

function a = sigmoid(z)
a = 1/(1+exp(-z));
endfunction a = sigmoid(z)
a = 1./(1+exp(-z));
end

二者唯一的不同正在于,做除法运算时,上边的函数没有点,下边的函数有点,这就导致了,第一个函数不可以接受向量或者矩阵,而第二个函数可以。

4. Rosenbrock function

f(x)=∑i=1N−1100(xi+1−x2i)2+(1−xi)2wherex=[x1,…,xN]∈RN

f(\mathbf x)=\sum_{i=1}^{N-1}100(x_{i+1}-x_i^2)^2+(1-x_i)^2\quad \mbox {where} \quad \mathbf x=[x_1,\ldots,x_N]\in \mathbb{R}^N

f = sum(100*(x(2:end)-x(1:end-1).^2).^2+(1-x(1:end-1)).^2);

4. 三维矩阵的索引

patches = zeros(patchSize*patchSize, numPatches);
for i = 1:numPatches,rnd_patch = images(row_idx(i):row_idx(i)+patchSize-1, col_idx(i):col_idx(i)+patchSize-1, img_idx(i));patches(:, i) = rnd_patch(:);
end

改造为矢量形式:

patches = reshape(images(row_idx:row_idx+patchSize-1, col_idx:col_idx+patchSize-1, img_idx), patchSize*patchSize, numPatches);

matlab 矩阵矢量化编程相关推荐

  1. matlab 矢量化编程(二)—— 使用 meshgrid

    matlab 矩阵矢量化编程 使用 meshgrid 使用 meshgrid 避免二重循环. patchSize = 17;pixel_weights = zeros(patchSize); mid ...

  2. Stanford UFLDL教程 矢量化编程

    矢量化编程 当使用学习算法时,一段更快的代码通常意味着项目进展更快.例如,如果你的学习算法需要花费20分钟运行完成,这意味着你每个小时能"尝试"3个新主意.但是假如你的程序需要20 ...

  3. matlab 矩阵位移法编程 结构力学,matlab 矩阵位移法编程 结构力学.doc

    matlab 矩阵位移法编程 结构力学.doc 矩阵位移法编程大作业(091210211)一.编制原理本程序的原理是基于结构力学矩阵位移法原理,以结构结点位移作基本未知量,将要分析的结构拆成已知节点力 ...

  4. matlab 矢量化,matlab矢量化编程简要

    一.基本技术 1)MATLAB索引或引用(MATLAB Indexing or Referencing) 在MATLAB中有三种基本方法可以选取一个矩阵的子阵.它们分别是下标法,线性法和逻辑法(sub ...

  5. matlab图片矢量化,matlab图形矢量化解决方案

    大致思路:matlab中生成矢量格式文件-导入Visio中-编辑-导出合适格式-在其他软件中使用 准备工具 Matlab 2014b或更高版本 Visio 2007或更高版本 我查看过,Matlab能 ...

  6. matlab 矩阵位移法编程 结构力学,matlab 矩阵位移法编程 结构力学

    矩阵位移法编程大作业 (091210211) 一.编制原理 本程序的原理是基于结构力学矩阵位移法原理,以结构结点位移作基本未知量,将要分析的结构拆成已知节点力-结点力位移关系的单跨梁集合,通过强令结构 ...

  7. matlab 矢量化编程(四)—— 标量函数转化为能够处理矢量的函数

    1. 组合的矢量实现 nchoosek(n, k) 的第二个参数在 matlab 下是不支持矢量化的,必须是标量形式.但 matlab 下的 gamma 函数,却可支持,矢量形式,又因为,gamma ...

  8. EPI_H/EPI_V(边缘保持指数,matlab 矢量化编程)

    EPI: edge preservation index,衡量对原始图像的操作(目标图像)对图像边缘的保持能力. EPI_H:horizontal ,水平方向: EPI_V:vertical,垂直方向 ...

  9. matlab 矢量化编程(三) —— 软阈值函数

    dj,k^=⎧⎩⎨⎪⎪dj,k−λ,dj,k≥λ0,otherwisedj,k+λ,dj,k≤−λ \hat{d_{j,k}}=\left\{\begin{array}{l}d_{j,k}-\lamb ...

最新文章

  1. 因为这个工具,我在 GitHub 搜索源码的时间缩短了 50%!
  2. 【iOS系列】-程序开启后台运行
  3. 第八周实践项目4 字符串加密
  4. Linux软件管理器(如何使用软件管理器来管理软件)
  5. windows共享内存
  6. ASP.NET WebAPi之断点续传下载(上)
  7. 设计模式笔记(7)---适配器模式(结构型)
  8. 保研生看过来!加入DUT Media Lab,科研没有不可能!
  9. Memcached安装与使用实例
  10. 一个例子说明数据库union all的作用
  11. HTML 4.0 语 法 教 学
  12. GBIT51129-2015工业化建筑评价标准
  13. React中使用worker线程
  14. 索尔维会议记录软件测试,科学史上的今天:10/30|索尔维会议创立,史上最强科学梦幻明星队...
  15. 马后炮之12306抢票工具(二) -- 联系人获取车次
  16. 有哪些高质量的英文有声书 audiobook?
  17. 《批量处理图片》批量把文件夹中的图片放到Excel中-Excel批量上传图片
  18. C#同步和异步(四)等待异步调用完成
  19. 启发式函数在A* 中的作用
  20. runnable、callable、consumer、supplier

热门文章

  1. Python之 类属性和类方法
  2. linux下mysql启动失败问题解决(CentOS7)
  3. 系统更新链接服务器超时,win10系统更新导致Dr.com连接认证服务器超时的解决方法...
  4. 剑指offer面试题50. 第一个只出现一次的字符(哈希表)
  5. OpenCV精进之路(十九):工具——程序打包发布
  6. MachineLearning:UFLDL学习笔记 ---- 主成分分析与白化
  7. java jdbc 表存在_JDBC / Java – 如何检查数据库中是否存在表和列?
  8. Python 列表下标操作
  9. mysql备份与还原,增量备份;使用ibd和frm文件恢复数据
  10. ABAP 常用FUNCTION (最近工作中用到的)