Tensor
public struct Tensor<Element> : AnyTensor where Element : TensorNumeric
extension Tensor: ExpressibleByArrayLiteral
extension Tensor: CustomStringConvertible
extension Tensor: CustomDebugStringConvertible
extension Tensor: PythonConvertible where Element: NumpyScalarCompatible
Basic tensor type.
-
Declaration
Swift
public var storage: AnyTensorStorage { get }
-
Declaration
Swift
public var cTensor: UnsafeMutablePointer<ccv_nnc_tensor_t> { get }
-
Create a typed tensor from a type-erased tensor.
Declaration
Swift
public init(_ tensor: AnyTensor)
Parameters
tensor
A type-erased tensor.
-
Convert from a different type tensor to this tensor. If the given tensor is not contiguous, this method will make it contiguous.
Declaration
Swift
public init(from tensor: AnyTensor)
Parameters
tensor
A type-erased tensor.
-
Declaration
Swift
public init(_ kind: DeviceKind, format: TensorFormat, shape: TensorShape)
-
Create a new uninitialized tensor.
Declaration
Swift
public init(_ kind: DeviceKind, _ dimensionFormat: TensorShapeFormat)
Parameters
kind
Which device this new tensor is on.
dimensionFormat
The format and shape of the new tensor.
-
Declaration
Swift
public init<S: Sequence>( _ sequence: S, kind: DeviceKind, format: TensorFormat, shape: TensorShape ) where S.Element == Element
-
Create a new tensor and initialize with content from a sequence.
Declaration
Swift
public init<S: Sequence>( _ sequence: S, _ kind: DeviceKind, _ dimensionFormat: TensorShapeFormat ) where S.Element == Element
Parameters
sequence
The sequence to initialize the new tensor with.
dimensionFormat
The format and shape of the new tensor.
-
Declaration
Swift
public init( _ kind: DeviceKind, format: TensorFormat, shape: TensorShape, unsafeMutablePointer: UnsafeMutablePointer<Element>, bindLifetimeOf: Any )
-
Declaration
Swift
@inlinable public subscript(indices: Int...) -> Element { get set }
-
Declaration
Swift
@inlinable public subscript(ranges: Range<Int>...) -> Tensor<Element> { get set }
-
Initialize a tensor from MjArray. This doesn’t copy the data over, rather, we simply keep the original MjArray alive. That’s also why we don’t support any data conversion. If you want to keep the resulting Tensor for later usage (rather than do the computation right now), you need to make your own copies because MjArray CANNOT be immutable and can tied to underlying MjData updates (through
MjModel.forward
orMjModel.step
).Declaration
Swift
@inlinable public init(mjArray: MjArray<Element>)
-
Declaration
Swift
@inlinable public func withUnsafeBytes<R>(_ body: (UnsafeRawBufferPointer) throws -> R) rethrows -> R
-
Declaration
Swift
@inlinable public mutating func withUnsafeMutableBytes<R>( _ body: (UnsafeMutableRawBufferPointer) throws -> R ) rethrows -> R
-
Declaration
Swift
public init(_ elements: [Element])
-
Declaration
Swift
public init(arrayLiteral elements: Element...)
-
Declaration
Swift
@inlinable public subscript(range: Range<Int>) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, range: Range<Int>) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, range: Range<Int>) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, range: Range<Int>) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, range: Range<Int>) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, range: Range<Int>) -> Tensor< Element >
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, range: Range<Int>) -> Tensor<Element>
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, range: Range<Int>) -> Tensor<Element>
-
Declaration
Swift
@inlinable public subscript(range: UnboundedRange) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, range: UnboundedRange) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, range: UnboundedRange) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, range: UnboundedRange) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, range: UnboundedRange) -> Tensor<Element> { get set }
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, range: UnboundedRange) -> Tensor< Element >
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, range: UnboundedRange) -> Tensor<Element>
-
Declaration
Swift
@inlinable public subscript(i0: Int, i1: Int, i2: Int, i3: Int, i4: Int, i5: Int, i6: Int, range: UnboundedRange ) -> Tensor<Element>
-
Move this tensor from CPU to GPU.
Declaration
Swift
public func toGPU(_ ordinal: Int = 0, streamContext: StreamContext? = nil) -> Tensor<Element>
Parameters
ordinal
Which GPU the new tensor will reside.
streamContext
Run the operation on the given stream context.
Return Value
A new tensor on GPU.
-
Move this tensor from GPU to CPU.
Declaration
Swift
public func toCPU(streamContext: StreamContext? = nil) -> Tensor<Element>
Parameters
streamContext
Run the operation on the given stream context.
Return Value
A new tensor on CPU.
-
Make an explicit copy of the existing tensor. Raw tensors conforms to copy-on-write semantics. But sometimes, it is better to have explicit copy for better memory management hygiene. For example, if the tensor is obtained with .rawValue from a DynamicGraph variable, keeping that tensor alive would keep the whole computation graph available. Making an explicit copy would break that chain.
Declaration
Swift
public func copied() -> Tensor<Element>
Return Value
A new tensor copied from the existing one.
-
Only make explicit copy if the original is not contiguous in memory.
Declaration
Swift
public func contiguous() -> Tensor<Element>
Return Value
A new tensor copied from the existing one.
-
Declaration
Swift
public func reshaped( format: TensorFormat, shape: TensorShape, offset: TensorShape? = nil, strides: TensorShape? = nil ) -> Self
-
Create a new tensor pointing to the same memory region but with different sizes.
Declaration
Swift
public func reshaped( _ shapeFormat: TensorShapeFormat, offset: TensorShape? = nil, strides: TensorShape? = nil ) -> Self
Parameters
shapeFormat
New format and shape for the tensor.
offset
Whether offset on each shape.
strides
The strides on each shape.
Return Value
The new tensor with different format but the same memory content.
-
Create a new tensor with dimensions permuted.
Declaration
Swift
public func permuted(_ indices: Int...) -> Tensor<Element>
Parameters
indices
The indices for dimensions from the original tensor. For example, a [2, 3, 4] tensor with [2, 0, 1] indices will permute to a [4, 2, 3] tensor.
Return Value
The new tensor with dimensions permuted.
-
Declaration
Swift
public var description: String { get }
-
Declaration
Swift
public var debugDescription: String { get }
-
Cannot create a tensor from numpy array.
See moreDeclaration
Swift
public enum NumpyScalarCompatibleError : Error
-
Initialize a tensor from numpy object. This doesn’t copy the data over, rather, we simply keep the original numpyArray alive. That’s also why we don’t support any data conversion.
Declaration
Swift
public init(numpy numpyArray: PythonObject) throws
-
Make a numpy object from a typed tensor.
Declaration
Swift
public func makeNumpyArray() -> PythonObject
-
Declaration
Swift
public var pythonObject: PythonObject { get }