Module: DaruLite::Vector::Indexable
- Included in:
- DaruLite::Vector
- Defined in:
- lib/daru_lite/vector/indexable.rb
Instance Method Summary collapse
- #detach_index ⇒ Object
-
#has_index?(index) ⇒ Boolean
Returns true if an index exists.
- #index=(idx) ⇒ Object
-
#index_of(element) ⇒ Object
Get index of element.
-
#indexes(*values) ⇒ Array
Return indexes of values specified.
-
#reindex(new_index) ⇒ Object
Create a new vector with a different index, and preserve the indexing of current elements.
-
#reindex!(new_index) ⇒ DaruLite::Vector
Sets new index for vector.
- #reset_index! ⇒ Object
Instance Method Details
#detach_index ⇒ Object
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
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
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
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.
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 |