samplefun

Класс: matlab.unittest.measurement.MeasurementResult
Пакет: matlab.unittest.measurement

Примените функцию через выборки MeasurementResult массив

Синтаксис

[B1,...,Bm] = samplefun(fh,R)
[B1,...,Bm] = samplefun(fh,R,'UniformOutput',tf)

Описание

[B1,...,Bm] = samplefun(fh,R) применяет функциональный fh через выборки на каждом элементе MeasurementResult массив. Каждый выходной аргумент от samplefun соответствует выходному аргументу от fh и имеет тот же размер и форму как R.

[B1,...,Bm] = samplefun(fh,R,'UniformOutput',tf) указывает если выход fh может быть возвращен без инкапсуляции в массиве ячеек. По умолчанию, fh должен возвратить скалярные значения, которые могут быть конкатенированы в массив.

Входные параметры

развернуть все

Функция, чтобы применяться через выборки на каждый элемент MeasurementResult массив, определенный функцией указатель.

Результаты выполнения измерения экспериментируют на тестовом наборе, заданном как MeasurementResult массив.

Индикатор, ли fh возвращает универсальные значения, заданные как true или falsetf true по умолчанию, который указывает на тот fh возвращает скалярные значения, которые могут быть конкатенированы в массив. Если tf false, выходные параметры fh может иметь различные размеры и типы данных. samplefun возвращает эти неоднородные выходные параметры в массиве ячеек.

Примеры

развернуть все

В вашей текущей рабочей папке создайте основанный на классах тест, preallocationTest.m, это сравнивает различные методы предварительного выделения.

classdef preallocationTest < matlab.perftest.TestCase
    methods(Test)
        function testOnes(testCase)
            x = ones(1,1e7);
        end
        
        function testIndexingWithVariable(testCase)
            id = 1:1e7;
            x(id) = 1;
        end
        
        function testIndexingOnLHS(testCase)
            x(1:1e7) = 1;
        end
        
        function testForLoop(testCase)
            for i=1:1e7
                x(i) = 1;
            end
        end
        
    end
end

Создайте тестовый набор.

suite = testsuite('preallocationTest');

Создайте переменный эксперимент времени и запустите тесты.

import matlab.perftest.TimeExperiment
experiment = TimeExperiment.limitingSamplingError;
R = run(experiment,suite);
Running preallocationTest
..........
..........
..........
......Warning: Target Relative Margin of Error not met after running the MaxSamples
for preallocationTest/testOnes. 
....
..........
..........
..........
..........
.....
Done preallocationTest
__________

Для каждого тестового элемента найдите среднее время выборок.

M = samplefun(@mean,R)
M =

    0.0350    0.1351    0.0789    0.7337

Для каждого тестового элемента найдите минимальное время и индекс к минимальному времени.

[M,I] = samplefun(@min,R)
M =

    0.0258    0.1169    0.0691    0.6531


I =

    27     3     1     1

В вашей текущей рабочей папке создайте основанный на классах тест, preallocationTest.m, это сравнивает различные методы предварительного выделения.

classdef preallocationTest < matlab.perftest.TestCase
    methods(Test)
        function testOnes(testCase)
            x = ones(1,1e7);
        end
        
        function testIndexingWithVariable(testCase)
            id = 1:1e7;
            x(id) = 1;
        end
        
        function testIndexingOnLHS(testCase)
            x(1:1e7) = 1;
        end
        
        function testForLoop(testCase)
            for i=1:1e7
                x(i) = 1;
            end
        end
        
    end
end

Создайте тестовый набор.

suite = testsuite('preallocationTest');

Создайте фиксированный эксперимент времени с 26 демонстрационными измерениями и запустите тесты.

import matlab.perftest.TimeExperiment
experiment = TimeExperiment.withFixedSampleSize(26);
R = run(experiment,suite);
Running preallocationTest
..........
..........
..........
..........
..........
..........
..........
..........
..........
..........
....
Done preallocationTest
__________

В вашей текущей рабочей папке создайте функцию, customSampleFun, это вычисляет среднее значение каждой из этих 26 выборок, преобразует среднее значение в миллисекунды и возвращает вектор символов, указывающий, было ли среднее время быстрым или медленным.

function [mean_ms,speed] = customSampleFun(S)
threshold_ms = 100;
mean_ms = mean(S)*1e3;
if mean_ms < threshold_ms
    speed = 'fast';
else
    speed = 'slow';
end
end

Примените customSampleFun к каждому элементу в MeasurementResult массив. Поскольку векторы символов не являются скаляром, задают UniformOutput как ложь.

[mean_ms,speed] = samplefun(@customSampleFun,R,'UniformOutput',false)
mean_ms =

  1×4 cell array

    [30.9500]    [142.7037]    [83.9830]    [806.3446]


speed =

  1×4 cell array

    'fast'    'slow'    'fast'    'slow'

Смотрите также

Введенный в R2017a

Для просмотра документации необходимо авторизоваться на сайте