KMP library for tensors #300

Merged
grinisrit merged 215 commits from feature/tensor-algebra into dev 2021-05-08 09:48:04 +03:00
Showing only changes of commit dde1db7b0a - Show all commits

View File

@ -9,17 +9,17 @@ import space.kscience.kmath.tensors.api.Tensor
import space.kscience.kmath.tensors.core.internal.tensor import space.kscience.kmath.tensors.core.internal.tensor
/** /**
* Casts [Tensor<Double>] to [DoubleTensor] * Casts [Tensor] iof [Double] to [DoubleTensor]
*/ */
public fun Tensor<Double>.toDoubleTensor(): DoubleTensor = this.tensor public fun Tensor<Double>.toDoubleTensor(): DoubleTensor = this.tensor
/** /**
* Casts [Tensor<Int>] to [IntTensor] * Casts [Tensor] iof [Int] to [IntTensor]
*/ */
public fun Tensor<Int>.toIntTensor(): IntTensor = this.tensor public fun Tensor<Int>.toIntTensor(): IntTensor = this.tensor
/** /**
* @return [DoubleArray] of tensor elements * Returns [DoubleArray] of tensor elements
*/ */
public fun DoubleTensor.toDoubleArray(): DoubleArray { public fun DoubleTensor.toDoubleArray(): DoubleArray {
return DoubleArray(numElements) { i -> return DoubleArray(numElements) { i ->
@ -28,42 +28,10 @@ public fun DoubleTensor.toDoubleArray(): DoubleArray {
} }
/** /**
* @return [IntArray] of tensor elements * Returns [IntArray] of tensor elements
*/ */
public fun IntTensor.toIntArray(): IntArray { public fun IntTensor.toIntArray(): IntArray {
return IntArray(numElements) { i -> return IntArray(numElements) { i ->
mutableBuffer[bufferStart + i] mutableBuffer[bufferStart + i]
} }
} }
/**
* Casts [Array<DoubleArray>] to [DoubleTensor]
*/
public fun Array<DoubleArray>.toDoubleTensor(): DoubleTensor {
val n = size
check(n > 0) { "An empty array cannot be casted to tensor" }
val m = first().size
check(m > 0) { "Inner arrays must have at least 1 argument" }
check(all { size == m }) { "Inner arrays must be the same size" }
val shape = intArrayOf(n, m)
val buffer = this.flatMap { arr -> arr.map { it } }.toDoubleArray()
return DoubleTensor(shape, buffer, 0)
}
/**
* Casts [Array<IntArray>] to [IntTensor]
*/
public fun Array<IntArray>.toIntTensor(): IntTensor {
val n = size
check(n > 0) { "An empty array cannot be casted to tensor" }
val m = first().size
check(m > 0) { "Inner arrays must have at least 1 argument" }
check(all { size == m }) { "Inner arrays must be the same size" }
val shape = intArrayOf(n, m)
val buffer = this.flatMap { arr -> arr.map { it } }.toIntArray()
return IntTensor(shape, buffer, 0)
}