Module: NVector

Defined in:
lib/nmatrix/shortcuts.rb

Overview

:nodoc:

Class Method Summary collapse

Class Method Details

.bindgen(n) ⇒ Object

call-seq:

bindgen(n) -> NVector

Returns a byte NVector. Equivalent to seq(n, :byte).

  • Arguments :

    • n -> Size of the sequence.

  • Returns :

    • NVector filled with n integers of dtype :byte.



1040
1041
1042
# File 'lib/nmatrix/shortcuts.rb', line 1040

def bindgen(n)
  NVector.seq(n, :byte)
end

.cindgen(n) ⇒ Object

call-seq:

cindgen(n) -> NVector

Returns a complex NVector. Equivalent to seq(n, :complex64).

  • Arguments :

    • n -> Size of the sequence.

  • Returns :

    • NVector filled with n integers of dtype :complex64.



1055
1056
1057
# File 'lib/nmatrix/shortcuts.rb', line 1055

def cindgen(n)
  NVector.seq(n, :complex64)
end

.findgen(n) ⇒ Object

call-seq:

findgen(n) -> NVector

Returns a float NVector. Equivalent to seq(n, :float32).

  • Arguments :

    • n -> Size of the sequence.

  • Returns :

    • NVector filled with n integers of dtype :float32.



1025
1026
1027
# File 'lib/nmatrix/shortcuts.rb', line 1025

def findgen(n)
  NVector.seq(n, :float32)
end

.indgen(n) ⇒ Object

call-seq:

indgen(n) -> NVector

Returns an integer NVector. Equivalent to seq(n, :int32).

  • Arguments :

    • n -> Size of the sequence.

  • Returns :

    • NVector filled with n integers of dtype :int32.



1010
1011
1012
# File 'lib/nmatrix/shortcuts.rb', line 1010

def indgen(n)
  NVector.seq(n, :int32)
end

.linspace(a, b, n = 100) ⇒ Object

call-seq:

linspace(a, b) -> NVector
linspace(a, b, n) -> NVector

Returns a NVector with n values of dtype :float64 equally spaced from a to b, inclusive.

See: www.mathworks.com/help/matlab/ref/linspace.html

  • Arguments :

    • a -> The first value in the sequence.

    • b -> The last value in the sequence.

    • n -> The number of elements. Default is 100.

  • Returns :

    • NVector with n :float64 values.

Example:

x = NVector.linspace(0, Math::PI, 1000)
x.pretty_print
  [0.0
  0.0031447373909807737
  0.006289474781961547
  ...
  3.135303178807831
  3.138447916198812
  3.141592653589793]
=> nil


1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
# File 'lib/nmatrix/shortcuts.rb', line 1088

def linspace(a, b, n = 100)
  # Formula: seq(n) * step + a

  # step = ((b - a) / (n - 1))
  step = (b - a) * (1.0 / (n - 1))

  # dtype = :float64 is used to prevent integer coercion.
  result = NVector.seq(n, :float64) * NMatrix.new([n,1], step, dtype: :float64)
  result += NMatrix.new([n,1], a, dtype: :float64)
  result
end

.logspace(a, b, n = 100) ⇒ Object

call-seq:

logspace(a, b) -> NVector
logspace(a, b, n) -> NVector

Returns a NVector with n values of dtype :float64 logarithmically spaced from 10^a to 10^b, inclusive.

See: www.mathworks.com/help/matlab/ref/logspace.html

  • Arguments :

    • a -> The first value in the sequence.

    • b -> The last value in the sequence.

    • n -> The number of elements. Default is 100.

  • Returns :

    • NVector with n :float64 values.

Example:

 x = NVector.logspace(0, Math::PI, 10)
 x.pretty_print
   [1.0
   2.2339109164570266
   4.990357982665873
   11.148015174505757
   24.903672795156997
   55.632586516975095
   124.27824233101062
   277.6265222213364
   620.1929186882427
   1385.4557313670107]
=> nil


1132
1133
1134
1135
1136
1137
1138
# File 'lib/nmatrix/shortcuts.rb', line 1132

def logspace(a, b, n = 100)
  # Formula: 10^a, 10^(a + step), ..., 10^b, where step = ((b-a) / (n-1)).

  result = NVector.linspace(a, b, n)
  result.each_stored_with_index { |element, i| result[i] = 10 ** element }
  result
end

.new(*args) ⇒ Object

call-seq:

new(shape) -> NVector
new(stype, shape) -> NVector
new(shape, init) -> NVector
new(:dense, shape, init) -> NVector
new(:list, shape, init) -> NVector
new(shape, init, dtype) -> NVector
new(stype, shape, init, dtype) -> NVector
new(stype, shape, dtype) -> NVector

Creates a new NVector. See also NMatrix#initialize for a more detailed explanation of the arguments.

  • Arguments :

    • stype -> (optional) Storage type of the vector (:list, :dense, :yale). Defaults to :dense.

    • shape -> Shape of the vector. Accepts [n,1], [1,n], or n, where n is a Fixnum.

    • init -> (optional) Yale: capacity; List: default value (0); Dense: initial value or values (uninitialized by default).

    • dtype -> (optional if init provided) Data type stored in the vector. For :dense and :list, can be inferred from init.

  • Returns : -



875
876
877
878
879
880
881
882
883
884
885
886
# File 'lib/nmatrix/shortcuts.rb', line 875

def new(*args)
  stype = args[0].is_a?(Symbol) ? args.shift : :dense
  shape = args[0].is_a?(Array) ? args.shift  : [1,args.shift]

  if shape.size != 2 || !shape.include?(1) || shape == [1,1]
    raise(ArgumentError, "shape must be a Fixnum or an Array of positive Fixnums where exactly one value is 1")
  end

  warn "NVector is deprecated and not guaranteed to work any longer"

  NMatrix.new(stype, shape, *args)
end

.ones(size, dtype = :float64) ⇒ Object

call-seq:

ones(size) -> NVector
ones(size, dtype) -> NVector

Creates a vector of ones with the dimensions supplied as parameters.

  • Arguments :

    • size -> Array (or integer for square matrix) specifying the dimensions.

    • dtype -> (optional) Default is :float64.

  • Returns :

    • NVector filled with ones.

Examples:

NVector.ones(2) # =>  1.0
                      1.0

NVector.ones(3, :int32) # =>  1
                              1
                              1


939
940
941
# File 'lib/nmatrix/shortcuts.rb', line 939

def ones(size, dtype = :float64)
  NMatrix.new([size,1], 1, dtype: dtype)
end

.random(size, opts = {}) ⇒ Object

call-seq:

random(size) -> NVector

Creates a vector with random numbers between 0 and 1 generated by Random::rand with the dimensions supplied as parameters.

  • Arguments :

    • size -> Array (or integer for square matrix) specifying the dimensions.

    • opts -> (optional) NMatrix#initialize options

  • Returns :

    • NVector filled with random numbers generated by the Random class.

Examples:

NVector.rand(2) # =>  0.4859439730644226
                      0.1783195585012436


961
962
963
964
965
966
967
968
# File 'lib/nmatrix/shortcuts.rb', line 961

def random(size, opts = {})
  rng = Random.new

  random_values = []
  size.times { |i| random_values << rng.rand }

  NMatrix.new([size,1], random_values, opts)
end

.seq(size, dtype = :int64) ⇒ Object

call-seq:

seq(n) -> NVector
seq(n, dtype) -> NVector

Creates a vector with a sequence of n integers starting at zero. You can choose other types based on the dtype parameter.

  • Arguments :

    • n -> Number of integers in the sequence.

    • dtype -> (optional) Default is :int64.

  • Returns :

    • NVector filled with n integers.

Examples:

NVector.seq(2) # =>  0
                     1

NVector.seq(3, :float32) # =>  0.0
                               1.0
                               2.0


993
994
995
996
997
# File 'lib/nmatrix/shortcuts.rb', line 993

def seq(size, dtype = :int64)
  values = (0 ... size).to_a

  NMatrix.new([size,1], values, dtype: dtype)
end

.zeros(size, dtype = :float64) ⇒ Object Also known as: zeroes

call-seq:

zeros(size) -> NMatrix
zeros(size, dtype) -> NMatrix

Creates a new vector of zeros with the dimensions supplied as parameters.

  • Arguments :

    • size -> Array (or integer for square matrix) specifying the dimensions.

    • dtype -> (optional) Default is :float64.

  • Returns :

    • NVector filled with zeros.

Examples:

NVector.zeros(2) # =>  0.0
                       0.0

NVector.zeros(3, :int32) # =>  0
                               0
                               0


911
912
913
# File 'lib/nmatrix/shortcuts.rb', line 911

def zeros(size, dtype = :float64)
  NMatrix.new([size,1], 0, dtype: dtype)
end