在矩阵的每一行上应用函数的最快方法是什么?

塞皮德·阿巴德普(Sepideh Abadpour)

到目前为止,我已搜查,我知道有几种方法(1234)到目前为止,我用下面的代码:

Fv_calc(:,2) = arrayfun(@(n) MaxPositiveRoot2DegreePolynomial(QuadraticCoefficients(n,:)), 1:size(QuadraticCoefficients,1));  

其中MaxPositiveRoot2DegreePolynomial是以下函数:

function root = MaxPositiveRoot2DegreePolynomial(c)
    d = c./c(1);
    root = eig([0 -d(3);1 -d(2)]);
    condition = root == abs(root);
    root = root(condition);
    if isempty(root)
        root = 0;
    end
    root = max(root);
end  

其中QuadraticCoefficients是62271x3矩阵包含的系数的每一行abc一般二次方程的。ax^2+bx+c关于我要解决的问题,所有根都是真实的,因此我使用了一种修改过的函数来查找根,以免浪费时间检查根是否为真。
通过对代码进行性能分析,我发现该函数的每次运行MaxPositiveRoot2DegreePolynomial大约需要0.000047秒,对于62271次运行来说大约是2.914925371秒。但是代码

Fv_calc(:,2) = arrayfun(@(n) MaxPositiveRoot2DegreePolynomial(QuadraticCoefficients(n,:)), 1:size(QuadraticCoefficients,1));  

需要3.198597803才能运行。所以大约0.283672431只是取arrayfun我想看看这次是否有减少的方法?

走走

这是一个完美的示例,它显示了您应该继续使用循环的地方。我打算使用的向量化解决方案最终比循环方法要慢。

但这可能取决于您的Matlab版本,因为我已经将Matlab R2015b优化的JIT-Compiler一起使用,在较旧的版本中,矢量化方法可能会更快。

[n,~] = size(C);
%// division
d = bsxfun(@rdivide,C,C(:,1));
%// create blocks for eigen matrix block procession
X = ( [zeros(n,1) ones(n,1) -d(:,3) -d(:,2)] ).'; %'
Y = reshape(X,2,[]);
%// use block processing to get eigenvalues of blocks
rt = blockproc(Y,[2 2],@(x) eig(x.data) ).'; %'
%// check if eigen values are real positives
condition = rt == abs(rt);
%// output filter
out = rt(condition);

基准

function [t] = bench()
    %// load your data
    DATA = load('matlab');
    C = DATA.QuadraticCoefficients;

    % functions to compare
    fcns = {
        @() thewaywewalk(C);
        @() sepideh(C);
    };

    % timeit
    t = zeros(2,1);
    for ii = 1:10;
        t = t + cellfun(@timeit, fcns);
    end
end

function out = thewaywewalk(C)  %thewaywewalk
    [n,~] = size(C);
    d = bsxfun(@rdivide,C,C(:,1));
    X = ( [zeros(n,1) ones(n,1) -d(:,3) -d(:,2)] ).'; %'
    Y = reshape(X,2,[]);
    rt = blockproc(Y,[2 2],@(x) eig(x.data) ).'; %'
    condition = rt == abs(rt);
    out = rt(condition);
end
function out = sepideh(C)  %sepideh
    [n,~] = size(C);
    out = zeros(n,1);
    for ii = 1:n
        c = C(ii,:);
        d = c./c(1);
        rt = eig([0 -d(3);1 -d(2)]);
        condition = rt == abs(rt);
        rt = rt(condition);
        if isempty(rt)
            rt = 0;
        end
        rt = max(rt);
        out(ii) = rt;
    end
end

ans =

    12.2086  %// thewaywewalk
     9.2176  %// sepideh

我仍然看不到if条件的意义。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用矩阵每一行中的元素应用函数

来自分类Dev

在 numpy 数组中的每一行上应用函数?

来自分类Dev

在 Pandas 数据帧的每一行上应用函数

来自分类Dev

在大型表的每一行上完成功能的最简单方法是什么?

来自分类Dev

矩阵函数是应用于整个矩阵还是Fortran中的每一行?

来自分类Dev

获取一行数据记录的最快方法是什么?

来自分类Dev

如何在数据框的每一行上应用函数?

来自分类Dev

在数据帧的每一行上应用 SentimentIntensityAnalyzer 函数并提供情绪分数

来自分类Dev

在Linux中读取文件中的每一行的更好方法是什么?

来自分类Dev

检查每一行到特定字符的最有效方法是什么

来自分类Dev

检查每一行到特定字符的最有效方法是什么

来自分类Dev

矩阵乘法最快的方法是什么?

来自分类Dev

如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

将函数应用于ndarray的每一行

来自分类Dev

Python分析:在函数的每一行上花费的时间

来自分类Dev

重复矩阵的每一行

来自分类Dev

如何添加矩阵的每一行?

来自分类Dev

在数据帧的每一行上应用函数并同时增加一个计数器

来自分类Dev

R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

来自分类Dev

使用Java,用数组中的值更新每一行中的一列的最佳方法是什么?(SQLite)

来自分类Dev

排序熊猫数据框中每一行的最快方法

来自分类Dev

numpy:计算二维数组每一行对角线的最快方法

来自分类Dev

python中读取csv,处理每一行并编写新的csv的最快方法

来自分类Dev

R中的性能:在矩阵中对行的元素进行排序的最快方法是什么?

来自分类Dev

在不打开整数的情况下读取每一行的最有效方法是什么?

来自分类Dev

将bsxfun或arrayfun应用到矩阵的每一行

来自分类Dev

在MATLAB中为不同矩阵中的每一行应用相交

来自分类Dev

Python Numpy将旋转矩阵应用于数组中的每一行

Related 相关文章

  1. 1

    使用矩阵每一行中的元素应用函数

  2. 2

    在 numpy 数组中的每一行上应用函数?

  3. 3

    在 Pandas 数据帧的每一行上应用函数

  4. 4

    在大型表的每一行上完成功能的最简单方法是什么?

  5. 5

    矩阵函数是应用于整个矩阵还是Fortran中的每一行?

  6. 6

    获取一行数据记录的最快方法是什么?

  7. 7

    如何在数据框的每一行上应用函数?

  8. 8

    在数据帧的每一行上应用 SentimentIntensityAnalyzer 函数并提供情绪分数

  9. 9

    在Linux中读取文件中的每一行的更好方法是什么?

  10. 10

    检查每一行到特定字符的最有效方法是什么

  11. 11

    检查每一行到特定字符的最有效方法是什么

  12. 12

    矩阵乘法最快的方法是什么?

  13. 13

    如何使用来自另一个矩阵对应行的参数将函数应用于矩阵的每一行

  14. 14

    将函数应用于ndarray的每一行

  15. 15

    将函数应用于ndarray的每一行

  16. 16

    Python分析:在函数的每一行上花费的时间

  17. 17

    重复矩阵的每一行

  18. 18

    如何添加矩阵的每一行?

  19. 19

    在数据帧的每一行上应用函数并同时增加一个计数器

  20. 20

    R - 将函数应用于数据帧的每一行,函数的参数是来自每一行的值

  21. 21

    使用Java,用数组中的值更新每一行中的一列的最佳方法是什么?(SQLite)

  22. 22

    排序熊猫数据框中每一行的最快方法

  23. 23

    numpy:计算二维数组每一行对角线的最快方法

  24. 24

    python中读取csv,处理每一行并编写新的csv的最快方法

  25. 25

    R中的性能:在矩阵中对行的元素进行排序的最快方法是什么?

  26. 26

    在不打开整数的情况下读取每一行的最有效方法是什么?

  27. 27

    将bsxfun或arrayfun应用到矩阵的每一行

  28. 28

    在MATLAB中为不同矩阵中的每一行应用相交

  29. 29

    Python Numpy将旋转矩阵应用于数组中的每一行

热门标签

归档