- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
这里主要想研究两点-
bsxfun
有六个内置关系运算:@eq (equal)
、@ne(不等于)
、@lt(小于)
、 @le(小于或等于)
、@gt(大于)
和 @ ge(大于或等于)
。很多时候我们将它们用于 float 和关系运算,它们输出逻辑数组。所以,这让我很好奇,如果在 float 上使用这些关系运算时,bsxfun
的固有扩展是否涉及输入元素的实际复制,而这恰恰是我的第一个问题。
我还想知道这个内存效率问题如何转化为 anonymous functions
当与 bsxfun
一起使用时,再次与关系操作一起使用。
这受到为 Comparing BSXFUN and REPMAT
执行的runtime/speedup
测试的启发。 .
最佳答案
要执行内存测试以查询问题中提出的要点,让我们定义输入 A
和 B
:
A = rand(M,N)
B = rand(1,N)
在这里, M
和 N
是大小参数,并保持为非常大的数字。
我会使用 repmat
进行比较,因为这似乎是 bsxfun
最接近的替代方案
。所以,这里的想法是运行 bsxfun
和 repmat
等效代码并注意任务管理器(在 Windows 上)内存使用量的波动。
This solution that compared bsxfun
and repmat
for runtime efficiency得出的结论是,将关系操作与 bsxfun
结合使用 的运行效率非常高,因此扩展 memory efficiency
的基础会很有趣 进行比较。
因此, bsxfun
和 repmat
等价物看起来像这样 -
REPMAT version: A == repmat(B,size(A,1),1)
BSXFUN version: bsxfun(@eq,A,B))
关于运行 repmat
然后是 bsxfun
代码,Windows 任务管理器显示类似这样的内容,第一个 bump 表示 repmat
的运行 下一个是给 bsxfun
的一个-
repmat
bump 的高度与 A
的实际副本相同。 被创建。这基本上表明 repmat
实际复制了 B
然后进行相等性检查。因为, B
将被复制到一个更大的 float 组,内存需求是巨大的,如前面的内存图中所示。另一方面, bsxfun
,从它的凸起高度来看,它似乎没有复制实际的浮点值,这导致了高效的内存使用。
现在,在转换两个 A
之后 和 B
到逻辑数组,内存使用 bumps 变成了这个 -
因此,它表明 repmat
然后能够优化内存,因为这次复制是逻辑数据类型。
使用匿名函数 bsxfun
: 可以通过 bsxfun
对匿名函数的使用进行一些实验 并查看 MATLAB 在优化内存需求方面是否表现出与内置相同的智能。
所以, bsxfun(@eq,A,B)
可以替换为 bsxfun(@(k1,k2) k1==k2,A,B)
。当对浮点输入数组进行操作时,此内置和匿名函数实现所产生的内存使用情况导致内存图如下所示 -
该图表明匿名函数的使用保持了与内置函数一样的内存效率,即使运行时受到很大阻碍。改用其他关系运算时,测试结果相似。
在对 float 组进行关系运算时,使用 bsxfun
绝对更可取。 超过 repmat
用于运行时和内存效率。所以,这只是证明有更多理由选择 bsxfun
!
关于matlab - BSXFUN 关于关系操作的内存效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29800560/
我有一个二元函数,大致看起来像 func=@(i,j)exp(-32*(i-j)^2); 网格如下 [X Y]=meshgrid(-10:.1:10); 奇怪的是,arrayfun 会产生正确的结果,
这是做什么的? u = [5 6]; s = [1 1]; data1 =[randn(10,1) -1*ones(10,1)]; data2 =[randn(10,1) ones(10,
在 Matlab R2016a 中,我有一大组成对的小 X 向量和 Y 向量(例如,10,000 个 1x3 X 向量与 10,000 个 1x3 Y 向量配对)。对于每个 {X,Y} 对,我想为 X
我有两组(50 个训练和 25 个测试)大小为 42 的直方图集。(这些数字是任意的,它们在现实中会更大,所以我正在寻找一种有效的方法。而且约定可能是相反的在转置方面,请随意使用任何约定 [featu
我主要使用 bsxfun 对我的代码进行矢量化,但我遇到了一个我无法完全破解的场景。这是一个小问题示例。我想删除此代码中的 for 循环,但我很难处理 tempEA 行。 Index = [2; 3;
这里主要想研究两点- bsxfun 有六个内置关系运算:@eq (equal)、@ne(不等于)、@lt(小于)、 @le(小于或等于)、@gt(大于) 和 @ ge(大于或等于)。很多时候我们将它们
我有一个问题。我正在尝试实现这段简短的代码。 我已经完成了基本步骤。请在下面检查我的代码: clc;clear all;close all; A=round(-3+(6).*rand(5,5)); B
我想将逐个元素的二元运算应用于大型逻辑向量。这些向量的内容是错误的,因此出于性能考虑,最好使用稀疏矩阵。如果我这样做,结果矩阵是不正确的。 例子 A = logical([0;1;0;0]); B =
我正在做一个关于神经网络的项目,我的工作介质是 Matlab。运行以下代码时: net=train(net, feat_mat, gt_mat); 我使用的神经网络是具有 3 个隐藏层的 ffnn。
假设我有 2 个向量,我想做一个外积。我可以使用: A=x*y'; 或者我可以像这样使用bsxfun: bsxfun(@times,x,y') 但我想批量生产外部产品。我有 2 个矩阵,每个矩阵都包含
我在 MATLAB 中有两个数组: A; % size(A) = [NX NY NZ 3 3] b; % size(b) = [NX NY NZ 3 1] 事实上,在三维域中,我为每个 (i, j,
在尝试理解 bsxfun 函数后,我尝试在脚本中实现它以避免循环。我试图检查数组中的每个单独元素是否包含在一个矩阵中,返回一个与分别包含 1 和 0 的初始数组大小相同的矩阵。我创建的匿名函数是: m
我正在使用 bsxfun在大小矩阵之间通过单例扩展对操作进行矢量化: MS: (nms, nls) KS: (nks, nls) 运算是对每个值的绝对差求和MS(m,l)与 m在1:nms和 l在1:
使用 MATLAB,想象一个 Nx6 的数字数组,它代表 N 个具有 3+3=6 个起始点和终点坐标的线段。 假设我有一个 function Calc_Dist( Segment_1, Segment
对于非数字数据,是否有等价于 bsxfun 的方法? 例如,我想比较存储在两个元胞数组中的所有字符串对: >> a = {'aa', 'bb', 'cc'}; >> b = {'dd', 'aa'};
我需要将矩阵 A 与 n 个矩阵相乘,然后得到 n 矩阵。例如,将 2x2 矩阵与 3 个堆叠为 2x2x3 Matlab 数组的 2x2 矩阵相乘。 bsxfun 是我通常在这种情况下使用的,但它只
在我的工作(计量经济学/统计学)中,我经常需要将不同大小的矩阵相乘,然后对生成的矩阵执行其他操作。我一直依靠 bsxfun() 来矢量化代码,总的来说我发现它比 repmat() 更有效。但我不明白的
一如既往地想向您学习更多信息,我希望我能在以下代码方面得到一些帮助。 我需要完成以下任务: 1) 我有一个向量: x = [1 2 3 4 5 6 7 8 9 10 11 12] 2) 和一个矩阵:
我有一个 double 的 2092x252 矩阵s 并且需要创建一个 for使用 bsxfun 的循环.对于这个例子,我们只说bsxfun(@minus) .我需要循环完成的是运行 bsxfun(@
从 bsxfun 的 Matlab 文档中给出了一个示例: fun = @(A,B) A.*sin(B); A = 1:7; B = pi*[0 1/4 1/3 1/2 2/3 3/4 1].'; %
我是一名优秀的程序员,十分优秀!