주요 콘텐츠

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)MeasurementResult 배열의 각 요소에 있는 샘플에 함수 fh를 적용합니다. samplefun의 각 출력 인수는 fh의 출력 인수에 대응하며, 크기와 형태가 R과 같습니다.

[B1,...,Bm] = samplefun(fh,R,'UniformOutput',tf)는 캡슐화 없이 fh의 출력값이 셀형 배열로 반환될 수 있는지를 지정합니다. 기본적으로, fh는 배열에 결합될 수 있는 스칼라 값을 반환해야 합니다.

입력 인수

모두 확장

MeasurementResult 배열의 각 요소에 대한 샘플에 적용할 함수로, 함수 핸들로 지정됩니다.

테스트 스위트에서 계측 실험을 실행한 결과로, MeasurementResult 배열로 지정됩니다.

fh가 균일 값을 반환하는지 여부를 나타내는 표시자로, true 또는 false로 지정됩니다. tf는 기본적으로 true이며, 이는 fh가 배열에 결합될 수 있는 스칼라 값을 반환함을 나타냅니다. tffalse인 경우 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
__________

26개 샘플 각각의 평균을 계산하고 이 평균을 밀리초로 변환하여 평균 시간이 빠른지 느린지를 나타내는 문자형 벡터를 반환하는 함수 customSampleFun을 현재 작업 폴더에 만듭니다.

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

customSampleFunMeasurementResult 배열의 각 요소에 적용합니다. 문자형 벡터는 스칼라가 아니므로, UniformOutput을 false로 지정합니다.

[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에 개발됨

참고 항목