Peter
04/18/2021, 5:23 PM@file:Suppress("ConstantConditionIf")
import org.nd4j.linalg.api.ndarray.INDArray
import org.nd4j.linalg.indexing.NDArrayIndex
/**
* Add stride syntax to int ranges: 0..100..2
*
* @param step
* @return
*/
operator fun IntRange.rangeTo(step: Int) : IntProgression {
return IntProgression.fromClosedRange(first, last, step)
}
/**
* Simplify NDArray access: a[0..4, 16..32..2, END-10..END-5]
*
* @param indexes
* @return
*/
operator fun INDArray.get(vararg indexes: IntProgression) : INDArray {
var dimension = 0
val intervals = indexes.map {
val first = if (it.first < 0) size(dimension).toInt() + it.first + 1 else it.first
val last = if (it.last < 0) size(dimension).toInt() + it.last + 1 else it.last
dimension++
NDArrayIndex.interval(first, it.step, last, false)!!
}.toTypedArray()
return get(*intervals)
}
// Small trick so the compiler doesn't infer empty ranges
val END = if (true) -1 else 1
PS I don't really use this, so might contain some bugs.altavir
04/18/2021, 5:51 PMРолан
04/18/2021, 7:07 PMРолан
04/18/2021, 7:08 PMРолан
04/18/2021, 7:10 PMРолан
04/18/2021, 7:10 PMРолан
04/18/2021, 7:16 PMarray[i][j][k]
etc. to subset each dimensionРолан
04/18/2021, 7:17 PMnumpy
usersPeter
04/18/2021, 7:56 PM