一.问题来源

  来自于一份LSH代码,记录下来。

二.函数解析

2.1 bsxfun

  bsxfun是一个matlab自版本R2007a来就提供的一个函数,作用是”applies an element-by-element binary operation to arrays a and b, with singleton expansion enabled。

  函数用在两个数组间元素逐个计算。比如当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作。从MATLAB R2007a开始,再遇到类似的问题时,我们有了简洁高效的方法,即利用bsxfun函数。

2.2 unique

  格式 b = unique (a) %取集合a的不重复元素构成的向量。
  b = unique (A,'rows') %返回A、B不同行元素组成的矩阵。

  我发现b中内容由小到大排序了。

  [b,i,j] = unique (…) %i体现b中元素在原向量(矩阵a)中的位置;j体现原向量(矩阵a)在b中的位置

  参考文献:http://blog.sina.com.cn/s/blog_5efed5800100crs2.html

三.实例分析

3.1 bsxfun  

  举个例子。假设我们有一列向量和一行向量。a = randn(3,1), b = randn(1,3),我们可以很简单的使用matlab的外乘c=a*b来得到,但如果我们想用”外加”呢?也就是说把上式求解过程中的乘号换做加号?
这时我们可以用c=bsxfun(@plus,a,b)来实现。
  bsxfun的执行是这样的,如果a和b的大小相同,那么c=a+b. 但如果有某维不同,且a或b必须有一个在这一维的维数为1, 那么bsxfun就将少的这个虚拟的复制一些来使与多的维数一样。在我们这里,b的第一维只有1(只一行),所以bsxfun将b复制3次形成一个3×3的矩阵,同样也将a复制成3×3的矩阵。这个等价于c=repmat(a,1,3)+repmat(b,3,1)。

  这里repmat是显式的复制,当然带来内存的消耗。而bsxfun是虚拟的复制,实际上通过for来实现,等效于for(i=1:3),for(j=1:3),c(i,j)=a(i)+b(j);end,end。但bsxfun不会有使用matlab的for所带来额外时间。从计算时间上来说前两种实现差不多,远高于for的实现。但如果数据很大,第二种实现可能会有内存上的问题。所以bsxfun最好。

  这里@plus是加法的函数数柄,相应的有减法@minus, 乘法@times, 左右除等,具体可见 doc bsxfun.也可以是m文件。

  @plus@minus@times@rdivide@ldivide@power@max@min@rem@mod@atan2@hypot@eq@ne@lt@le@gt@ge@and@or@xor

  参考文献http://blog.sina.com.cn/s/blog_9e67285801010ttn.html

3.2rempat

>> A=[1 1 2 2 4 4 6 4 6]
A =
1 1 2 2 4 4 6 4 6
>> [c,i,j]=unique(A)
c =
1 2 4 6
i =
2 4 8 9 %i体现b中元素在原向量(矩阵a)中的位置;
j =
1 1 2 2 3 3 4 3 4 %j体现原向量(矩阵a)在b中的位置

例1-40
>> A=[1 2 2 4;1 1 4 6;1 1 4 6]
A =
1 2 2 4
1 1 4 6
1 1 4 6
>> [c,i,j]=unique(A,'rows')
c =
1 1 4 6
1 2 2 4
i =
3
1
j =
2
1
1  

  如何将一个矩阵的每行或每列元素分别扩大不同的倍数?如[1 2 3;4 5 6 ;7 8 9],第一列元素乘以1,第二列元素以2,第三列元素乘以4。

  利用bsxfun函数,可以给出下列代码:a = [1,2,3;4,5,6;7,8,9];acol = bsxfun(@times,a,[1 2 4])

Matlab中bsxfun和unique函数解析相关推荐

  1. Python中numpy库unique函数解析

    a = np.unique(A) .unique()函数去除其中重复的元素,并按元素由大到小返回一个新的无元素重复的元组或者列表 import numpy as np A = [1, 2, 2, 5, ...

  2. matlab中trapz,MATLAB中trapz和cumtrapz函数

    这两个函数都是MATLAB中的内置函数,是基于梯形法则的数值积分公式 例如我们有函数y=x^3-2x-3,为了计算在[0,1]上的积分,可以这么做: 其中x和y分别是自变量和对应的值,trapz其实就 ...

  3. matlab repmate,MATLAB中“repmat”与“cat”函数的用法

    MATLAB中"repmat"与"cat"函数的用法 1. repmat函数 >> z=repmat(5,2,3) z = 5 5 5 5 5 5 ...

  4. 浅析MATLAB中的内联函数、匿名函数和函数函数

    内联函数 内联(inline)函数是MATLAB 7以前经常使用的一种构造函数对象的方法.在命令窗口.程序或函数中创建局部函数时,通过使用inline构造函数,而不用将其储存为一个M文件,同时又可以像 ...

  5. 线性回归用matlab怎么做,matlab中如何应用regress()函数进行线性回归分析?

    matlab中如何应用regress()函数进行线性回归分析?回归分析是研究一个随机变量与一个或多个普通变量之间的相关系的统计方法.如果做回归分析,有很多软件都已经封装好了的,我们只需直接调用就可以了 ...

  6. matlab中多元线性回归regress函数精确剖析(附实例代码)

    matlab中多元线性回归regress函数精确剖析(附实例代码) 目录 前言 一.何为regress? 二.regress函数中的参数 三.实例分析 总结 前言 regress函数功能十分强大,它可 ...

  7. 怎样在matlab中写技术,rect矩形函数 matlab中怎样编写矩形函数

    矩形函数的定义: 矩形函数 rect(t); 如果绝对值 |t| > 0.5 rect(t) = 0; 如果绝对值 |t| = 0.5 rect(t) = 0.5; 如果绝对值 |t| < ...

  8. matlab中pol2cart()函数

    matlab中pol2cart()函数 说明文件 pol2cart Transform polar to Cartesian coordinates. [X,Y] = pol2cart(TH,R) t ...

  9. matlab中如何处理复数,matlab中复数的处理函数

    matlab中复数的处理函数 MATLAB 中复数的处理函数要说明复数的运算,先从解以下的二次方程式的复数根谈起上式的根有实部 (-2) 及虚部 (±3),我们就这个复数的表示法来说明 MATLAB的 ...

最新文章

  1. 数据结构与算法—一文多图搞懂双链表
  2. 关于flex布局,我大多数常用的几个点
  3. 【python】python2.x中的除法
  4. 利用Dockefile将Python的py文件项目代码打包为Docker镜像
  5. 李德玉(1965-),男,博士,山西大学计算机与信息技术学院教授
  6. php 当地时间,PHP UTC到当地时间
  7. unique_ptr智能指针
  8. springBoot整合Dubbo使用与采坑
  9. 【光学】基于matlab GUI迈克尔逊实验仿真【含Matlab源码 060期】
  10. 桌面计算机图标怎么调出来,我把桌面上的一个图标隐藏了如何显示出来
  11. 这个与流程管理相结合的低代码平台,你一定不能错过
  12. java数独求交集方法,标准数独解题之旅(用一道数独题讲解最基本的5种解题技巧)(二)...
  13. word最后一页空白页删除
  14. 北大MBA夫妇不满现有教育系统 携女隐居终南山
  15. K3S执行命令提示You must be logged in to the server (Unauthorized)
  16. 搜站 - 聚合搜索,一站访问
  17. XCEL查找SQL SERVER数据库的数据
  18. 速卖通代运营说:速卖通太难了!2020去做不算晚,但是也绝对不早!
  19. HLA(high level architecture) 高层体系结构
  20. C语言中string函数库中的一些函数的用法

热门文章

  1. 浅谈TCP优化(转)
  2. 任务二十九:表单(一)单个表单项的检验
  3. 转:10+年程序员总结的20+条经验教训
  4. (转)深入理解最强桌面地图控件GMAP.NET ---离线地图
  5. shell编程入门步步高(九、sed和awk)
  6. 进军SharePoint,资料先行....
  7. c语言宏定义数组_利用数组处理批量数据 C语言程序编写定义与利用数组技巧全归纳...
  8. HTTP GET/CONNECT代理区别
  9. Android 触摸及手势操作GestureDetector
  10. Hibernate(2012/2/27)