相关文章推荐
爱看球的伤疤  ·  安卓图书馆: ...·  1 年前    · 
仗义的山羊  ·  asp.net - DataBind() ...·  1 年前    · 
挂过科的企鹅  ·  javascript - Node.js ...·  2 年前    · 

偶然间发现了这个函数,强大得不得了呀,它的作用是: 对两个矩阵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,...