Class: DTW::Medoid

Inherits:
Object
  • Object
show all
Defined in:
lib/dtwrb/medoid.rb,
sig/dtwrb.rbs

Constant Summary collapse

DEFAULT_SAMPLE_SIZE =

Exact selection costs O(k^2) alignments, so candidates are capped at a uniform subsample.

Returns:

  • (::Integer)
12

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(aligner: Aligner.new, sample_size: DEFAULT_SAMPLE_SIZE) ⇒ Medoid

Returns a new instance of Medoid.

Parameters:

  • aligner: (Aligner) (defaults to: Aligner.new)
  • sample_size: (::Integer) (defaults to: DEFAULT_SAMPLE_SIZE)

Raises:

  • (ArgumentError)


10
11
12
13
14
15
16
# File 'lib/dtwrb/medoid.rb', line 10

def initialize(aligner: Aligner.new, sample_size: DEFAULT_SAMPLE_SIZE)
  @aligner = aligner
  @sample_size = Integer(sample_size)
  raise ArgumentError, "sample size must be positive, got #{@sample_size}" unless @sample_size.positive?

  freeze
end

Instance Attribute Details

#alignerAligner (readonly)

Returns the value of attribute aligner.

Returns:



8
9
10
# File 'lib/dtwrb/medoid.rb', line 8

def aligner
  @aligner
end

#sample_size::Integer (readonly)

Returns the value of attribute sample_size.

Returns:

  • (::Integer)


8
9
10
# File 'lib/dtwrb/medoid.rb', line 8

def sample_size
  @sample_size
end

Instance Method Details

#call(sequences) ⇒ sequence

Parameters:

  • (::Array[untyped])

Returns:

  • (sequence)


18
19
20
21
22
23
# File 'lib/dtwrb/medoid.rb', line 18

def call(sequences)
  candidates = subsample(Sequence.compact(sequences))
  costs = accumulated_costs(candidates)

  candidates[costs.index(costs.min)]
end