Module: DaruLite::Vector::Indexable

Included in:
DaruLite::Vector
Defined in:
lib/daru_lite/vector/indexable.rb

Instance Method Summary collapse

Instance Method Details

#detach_indexObject



22
23
24
25
26
27
# File 'lib/daru_lite/vector/indexable.rb', line 22

def detach_index
  DaruLite::DataFrame.new(
    index: @index.to_a,
    values: @data.to_a
  )
end

#has_index?(index) ⇒ Boolean

Returns true if an index exists

Returns:

  • (Boolean)


18
19
20
# File 'lib/daru_lite/vector/indexable.rb', line 18

def has_index?(index) # rubocop:disable Naming/PredicateName
  @index.include? index
end

#index=(idx) ⇒ Object

Raises:

  • (ArgumentError)


56
57
58
59
60
61
62
63
# File 'lib/daru_lite/vector/indexable.rb', line 56

def index=(idx)
  idx = Index.coerce(idx)

  raise ArgumentError, "Size of supplied index #{idx.size} does not match size of Vector" if idx.size != size
  raise ArgumentError, 'Can only assign type Index and its subclasses.' unless idx.is_a?(DaruLite::Index)

  @index = idx
end

#index_of(element) ⇒ Object

Get index of element



5
6
7
8
9
10
# File 'lib/daru_lite/vector/indexable.rb', line 5

def index_of(element)
  case dtype
  when :array then @index.key(@data.index { |x| x.eql? element })
  else @index.key @data.index(element)
  end
end

#indexes(*values) ⇒ Array

Return indexes of values specified

Examples:

dv = DaruLite::Vector.new [1, 2, nil, Float::NAN], index: 11..14
dv.indexes nil, Float::NAN
# => [13, 14]

Parameters:

  • values (Array)

    values to find indexes for

Returns:

  • (Array)

    array of indexes of values specified



72
73
74
# File 'lib/daru_lite/vector/indexable.rb', line 72

def indexes(*values)
  index.to_a.values_at(*positions(*values))
end

#reindex(new_index) ⇒ Object

Create a new vector with a different index, and preserve the indexing of current elements.



52
53
54
# File 'lib/daru_lite/vector/indexable.rb', line 52

def reindex(new_index)
  dup.reindex!(new_index)
end

#reindex!(new_index) ⇒ DaruLite::Vector

Note:

Unlike #reorder! which takes positions as input it takes index as an input to reorder the vector

Sets new index for vector. Preserves index->value correspondence. Sets nil for new index keys absent from original index.

Parameters:

Returns:



35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'lib/daru_lite/vector/indexable.rb', line 35

def reindex!(new_index)
  values = []
  each_with_index do |val, i|
    values[new_index[i]] = val if new_index.include?(i)
  end
  values.fill(nil, values.size, new_index.size - values.size)

  @data = cast_vector_to @dtype, values
  @index = new_index

  update_position_cache

  self
end

#reset_index!Object



12
13
14
15
# File 'lib/daru_lite/vector/indexable.rb', line 12

def reset_index!
  @index = DaruLite::Index.new(Array.new(size) { |i| i })
  self
end