偶然间发现了这个函数,强大得不得了呀,它的作用是:
对两个矩阵A和B之间的每一个元素进行指定的计算(函数fun指定);
并且具有自动扩维的作用
例如,A是一个4*3的矩阵,B是一个4*1的列向量,如果想要矩阵A的每一列都对向量B进行一些操作,比如,A的每一列的相应元素都要除以向量B中的相应元素,那么,比较原始的方法就是利用repmat命令,将向量B进行平铺,对它的每一列进行复制,生成一个新的矩阵C,该矩阵C的每一列都是向量B,然后,利用点除,令A点除B,就实现了矩阵A的每一列的元素都除以向量B的元素的要求;
需要A的每一列都除以向量B,如果直接用点除,则会出错,因为点乘要求两个操作对象维度一致;
这是,比较原始的方法是:
但是,用这种方法会存在一个问题:如果数据的尾数过大,该方法会出现内存上的问题;
那么,bsxfun函数就是解决这个问题的great method=====bsxfun(@rdivide,A,B)
该函数的具体实现过程是:
①判断A和B的维度是否相同,如果相同,直接A./B;
@如果A和B的维度不同,则A或者B必须有一个在某个维度上是1,比如,上例中的B在列方向维度是1,那么,该函数将会对列向量B在列方向上进行复制,使其与矩阵A具有相同的列维度,然后,再进行A./B维度扩充后的矩阵
*****matlab带有的函数操作如下*****
这个 m 文件和随附的 mex
函数
复制了
bsxfun
的功能,以便在 R2007a 之前的旧版
MATLAB
中使用——这是内置
bsxfun
的第一个版本。
该代码保留了不复制任何大数组以执行其功能的重要功能。
包括一系列 mex
函数
的源代码,这些
函数
为几个基本运算符实现了此功能:加号、减号、时间等。该
函数
将在没有这些运算符的情况下工作,但速度会更慢。
其中,coefficients为PCA计算出的特征向量矩阵,k为所选取的主成分数量,X_centered为中心化后的原始数据,X_reduced为降维后的数据矩阵,X_recon为重构后的数据矩阵。其中,score为pca
函数
计算出的转换后的数据,eigenvalues为特征值,cumulative_contribution为特征值的累积贡献度,k表示选取的主成分数量。其中X_centered为中心化后的数据,coefficients为计算出的特征向量,score为转换后的数据。三、求解特征值和特征向量。
初步发布了
bsxfun
对任意长度、任意数量和任意内容的元胞数组的泛化。
元胞数组实际上可以包含任何
matlab
对象:数字、数组、字符串、结构等。
用户提供的功能应处理显示的输入(最好使用try-catch块)或在失败时返回可识别的默认值,例如nan,[]或0等。
例子: x = {randint(20),randint(20),randint(20)}; y = {randint(20),randint(20)}; z = {randint(20),randint(20)};
保存以下文件 myFunc1.m:
函数
res = myFunc1(varargin) 资源=[]; 尝试, res=varargin{1}*varargin{2}*varargin{3}; 结尾
xyz=maryCellFcn(@myFunc1, x, y, z)
这会产生一个大小为 3x2x
bsxarg 返回在
bsxfun
中虚拟使用的单例扩展数组。 bsxarg 限制为最多 12 个维度。
MATLAB
内在
函数
bsxfun
对输入数组执行二元运算,其中单维维度被虚拟扩展以执行运算。 bsxarg 实际上会进行单例扩展并返回物理扩展的数组。 建筑(仅限一次): >> 墨西哥设置(然后按照说明选择您选择的 C/C++ 编译器) >> mex bsxarg.c
句法[CD] = bsxarg(A,B)
描述C = A 的扩展版本。 D = B 的扩展版本。 A 和 B 的每个维度必须彼此相等,或者等于 1。只要 A 或 B 的维度是单例的(等于 1),数组就会沿着维度进行虚拟复制以匹配另一个数组。 如果另一个数组的对应维度为 0,则该数组可能会减少。 输出数组 C 和 D 的大小等于: max(size(A),size(B)).*(size(A)>0 & size(B
bsxfun
()
函数
的功能:两个数组间元素逐个计算的二值操作。
函数
使用方法:z=
bsxfun
(fun,x,y)两个数组x合y间元素逐个计算的二值操作,fun是
函数
句柄或者m文件,也可以如下内置
函数
。常见的内置
函数
如下:@plus 加@minus 减@times 数组乘@rdivide 左除@ldivide 右除@power 数组幂乘@max 二值最大值@min 二值最小值@rem 余数@mod 求...
关于
bsxfun
函数
的详细说明! 帮助文档中是这么说的:C =
bsxfun
(fun,A,B)
applies the element-by-element binary operation specified by the function handle fun to arrays A and B, with singleton expansion enabled. (两个数组
转自:http://blog.sina.com.cn/s/blog_9e67285801010ttn.html
网上关于
bsxfun
的东西不多,今天需要看到一个,由于原博文插入的图片显示不出来,于是笔者大发善心进行了contrl+V 以及alt+ctrl+A的操作,供大家交流学习。
bsxfun
是一个
matlab
自版本R2007a来就提供的一个
函数
,作用是”applies an e
bsxfun
是一个
matlab
自版本R2007a来就提供的一个
函数
,作用是”applies an element-by-element binary operation to arrays a and b, with singleton expansion enabled.”
函数
功能:两个数组间元素逐个计算的二值操作
使用方法:C=
bsxfun
(fun,
调用方法
bsxfun
(@function, X, Y);
如果X和Y的size一样,那么直接进行两个矩阵对应元素的二元操作,比如
bsxfun
(@plus, X, Y)等同于X.+Y。
如果X和Y的size不同,那么Y的列数必须为1,
bsxfun
会自动扩充Y的列数使它和X的列数一致
比如X = [1,2,3],Y=[2],
bsxfun
(@plus, X, Y)等同于[1,2,3].+[2,2,...