The tensor library is developed by J. Burguet and distributed as an add-on package of GSL. See here and here.
GSL::Tensor.new(rank, dimention)
GSL::Tensor.alloc(rank, dimention)
GSL::Tensor[rank, dimention]
GSL::Tensor.calloc(rank, dimention)
GSL::Tensor.copy(tensor)
GSL::Tensor.memcpy(dest, src)
GSL::Tensor.swap(a, b)
GSL::Tensor#set_zero
GSL::Tensor#set_all(x)
GSL::Tensor#set(indices, x)
GSL::Tensor#[indices]=x
GSL::Tensor#get(indices)
GSL::Tensor#[indices]
Returns the tensor element. If the number of indices given is smaller than the rank of the tensor, the method GSL::Tensor#subtensor is called.
Ex:
irb(main):002:0> t = Tensor.new(2, 3) => #<GSL::Tensor:0x762ae8> irb(main):003:0> t.set(1, 2, 2, 123) => #<GSL::Tensor:0x762ae8> irb(main):004:0> t.get(1, 2, 2) => 123.0 irb(main):005:0> t[0, 0, 2] = 456 => 456 irb(main):006:0> t[0, 0, 2] => 456.0
GSL::Tensor#subtensor(indices)
GSL::Tensor#[indices]
Return a subtensor.
Ex:
irb(main):001:0> require("gsl") => true irb(main):002:0> t = Vector[1..125].to_tensor(3, 5) => GSL::Tensor: [ 1.000e+00 2.000e+00 3.000e+00 4.000e+00 5.000e+00 6.000e+00 7.000e+00 ... ] irb(main):003:0> t[0] => GSL::Tensor::View: [ 1.000e+00 2.000e+00 3.000e+00 4.000e+00 5.000e+00 6.000e+00 7.000e+00 8.000e+00 9.000e+00 1.000e+01 1.100e+01 1.200e+01 1.300e+01 1.400e+01 1.500e+01 1.600e+01 1.700e+01 1.800e+01 1.900e+01 2.000e+01 2.100e+01 2.200e+01 2.300e+01 2.400e+01 2.500e+01 ] irb(main):004:0> t[0,2] => GSL::Tensor::View: [ 1.100e+01 1.200e+01 1.300e+01 1.400e+01 1.500e+01 ] irb(main):005:0> t[3,1] => GSL::Tensor::View: [ 8.100e+01 8.200e+01 8.300e+01 8.400e+01 8.500e+01 ] irb(main):006:0> t[1][2] => GSL::Tensor::View: [ 3.600e+01 3.700e+01 3.800e+01 3.900e+01 4.000e+01 ]
GSL::Tensor#swap_indices(i, j)
GSL::Tensor#data
GSL::Vector::View
.GSL::Tensor#to_v
GSL::Tensor#to_vector
GSL::Vector::View
object.GSL::Tensor#to_matrix
GSL::Matrix::View
object.GSL::Tensor#fwrite(io)
GSL::Tensor#fwrite(filename)
GSL::Tensor#fread(io)
GSL::Tensor#fread(filename)
GSL::Tensor#fprintf(io, format="%g")
GSL::Tensor#fprintf(filename, format="%g")
GSL::Tensor#fscanf(io)
GSL::Tensor#fscanf(filename)
GSL::Tensor#max
GSL::Tensor#min
GSL::Tensor#minmax
GSL::Tensor#max_index
GSL::Tensor#min_index
GSL::Tensor#minmax_index
GSL::Tensor#add(b)
GSL::Tensor#+(b)
GSL::Tensor#add!(b)
GSL::Tensor#sub(b)
GSL::Tensor#+(b)
GSL::Tensor#sub!(b)
GSL::Tensor#mul_elements(b)
GSL::Tensor#mul_elements!(b)
GSL::Tensor#div_elements(b)
GSL::Tensor#/(b)
GSL::Tensor#div_elements!(b)
GSL::Tensor#add_constant(x)
GSL::Tensor#add_constant!(x)
GSL::Tensor#scale(x)
GSL::Tensor#scale!(x)
GSL::Tensor#add_diagonal(x)
GSL::Tensor#add_diagonal!(x)
GSL::Tensor#product(b)
GSL::Tensor#*(b)
GSL::Tensor#contract(i, j)
GSL::Tensor#equal?(b, eps = 1e-10)
GSL::Tensor#==(b)
true
if the tensors have same size and elements
equal to absolute accurary eps for all the indices,
and false
otherwise.GSL::Tensor#isnull
GSL::Tensor#isnull?
true
if all the elements of the tensor are zero, and false
otherwise.GSL::Tensor#rank
GSL::Tensor#dimension
GSL::Tensor#size