为什么`minmax`需要比连续的'min`和`max`更长的时间?

时间:2017-07-12 10:28:19

标签: matlab

基本上这个问题说明了一切,我的直觉告诉我,拨打- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { if (application.applicationState == UIApplicationStateActive) { UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Received a Notification" message:[NSString stringWithFormat:@"My App received notification while it is running:\n%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]]delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alertView show]; } } 的时间比拨打minmax然后拨打min要少。

是否有一些优化我阻止Matlab执行以下代码?

最小最大:

max

https://medium.com/@ipaulpro/drag-and-swipe-with-recyclerview-b9456d2b1aaf

分开min-max:

function minmax_vals = minmaxtest()
    buffSize = 1000000;
    A = rand(128,buffSize);
    windowSize = 100;
    minmax_vals = zeros(128,buffSize/windowSize*2);
    for i=1:(buffSize/windowSize)
        minmax_vals(:,(2*i-1):(2*i)) = minmax(A(:,((i-1)*windowSize+1):(i*windowSize)));
    end
end

enter image description here

1 个答案:

答案 0 :(得分:6)

摘要

您可以看到开销,因为minmax未完全混淆。只需输入

即可
edit minmax

你会看到这个功能!

似乎存在nntype.data('format',x,'Data');的数据类型转换,而minmax的情况并非如此,而且可能代价高昂。这适用于MATLAB的神经网络(nn)工具,minmax属于该工具箱。

简而言之,minmax是较低级别的已编译的函数(因此它们 完全混淆了),而不是需要来自nn工具箱的功能。

基准

这是一个稍微孤立的基准测试,没有窗口并使用timeit而不是分析器。 我还提供了minmax中使用的数据转换的时间安排!测试获取大矩阵中每行的最小值和最大值,请参见下面的输出图和代码。 ..

benchmark

似乎行数和时间之间存在线性关系(如线性算子所预期的那样),但组合minmax关系的系数要大得多,与单独的操作相比大约快10倍。此外,您可以清楚地看到数据转换仅花费min然后max版本的更多时间!

function benchie()
    K = zeros(10, 3);
    for k = 1:10        
        n = 2^k;
        A = rand(n, 200);   
        Arow = zeros(1,200); 
        m = zeros(n,2);

        f1 = @()minmaxtest(A,m);
        K(k,1) = timeit(f1);

        f2 = @()minthenmaxtest(A,m);
        K(k,2) = timeit(f2);

        f3 = @()dataconversiontest(A, Arow);
        K(k,3) = timeit(f3);
    end
    figure; hold on; plot(2.^(1:10), K(:,1)); plot(2.^(1:10), K(:,2)); plot(2.^(1:10), K(:,3));
end
function minmaxtest(A,m)
    for ii = 1:size(A,1)
        m(ii, 1:2) = minmax(A(ii,:));
    end
end
function dataconversiontest(A, Arow)
    for ii = 1:size(A,1)
       Arow = nntype.data('format', A(ii,:), 'Data');;
    end    
end
function minthenmaxtest(A,m)
    for ii = 1:size(A,1)
        m(ii, 1) = min(A(ii,:));
        m(ii, 2) = max(A(ii,:));
    end
end