从 swift 数组创建张量

Swa*_*air 3 swift tensorflow swift-for-tensorflow

这工作正常:

import TensorFlow
var t = Tensor<Float>([[1, 0], [0, 1]])
Run Code Online (Sandbox Code Playgroud)

但以下给出了错误

import TensorFlow
var a = [[1, 0], [0, 1]]
var t = Tensor<Float>(a)
Run Code Online (Sandbox Code Playgroud)
error: expression type 'Tensor<Float>' is ambiguous without more context
var t = Tensor<Float>(a)
        ^~~~~~~~~~~~~~~~
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况?另外,如何快速从数组创建张量。

Swe*_*per 5

您的第一个代码之所以有效,是因为它使用文字而不是已声明的变量(其类型已确定)来初始化Tensor<Float>. 编译器对文字进行特殊处理。

Tensor.init您正在调用的重载是this。在你的情况下,它接受一个ShapedArray<Float>.

ShapedArray符合协议ExpressibleByArrayLiteral,这意味着编译器可以将数组文字ShapeArray隐式转换为。但是,这仅限于文字,例如[[1, 0], [0, 1]],而不是引用数组类型变量的标识符,例如a。的类型被编译器a推断为 a ,并且编译器无法将 a 隐式转换为。[[Int]][[Int]]ShapedArray<Float>

Float虽然不太重要,但符合ExpressibleByIntegerLiteral(因此1可以0转换为浮点数)的事实也在允许代码编译方面发挥了作用。

之所以var aa: Tensor<Float> = [[1.0, 0.0], [1.0, 0.0]]有效,是因为Tensor也符合ExpressibleByArrayLiteral