3

这工作正常:

import TensorFlow
var t = Tensor<Float>([[1, 0], [0, 1]])

但是下面给出了一个错误

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

为什么会这样?还有如何从数组中快速创建张量。

4

1 回答 1

4

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

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

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

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

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

于 2019-12-28T07:12:50.620 回答