从 swift 数组创建张量
Creating tensor from a swift array
这很好用:
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)
^~~~~~~~~~~~~~~~
为什么会这样?还有如何从 swift 中的数组创建张量。
您的第一个代码之所以有效,是因为它使用 文字 ,而不是使用已声明的变量(其类型已确定)来初始化 Tensor<Float>
。编译器对文字进行特殊处理。
您调用的 Tensor.init
的重载是 this。在您的情况下,它接受 ShapedArray<Float>
.
ShapedArray
符合协议 ExpressibleByArrayLiteral
,这意味着编译器可以将数组文字隐式转换为 ShapeArray
。但是,这仅限于文字,例如[[1, 0], [0, 1]]
,而不是引用数组类型变量的标识符,例如a
。 a
的类型被编译器推断为 [[Int]]
,编译器无法将 [[Int]]
隐式转换为 ShapedArray<Float>
。
虽然不那么重要,但 Float
符合 ExpressibleByIntegerLiteral
的事实(因此 1
和 0
可以转换为浮点数)也有助于允许你要编译的代码。
之所以var aa: Tensor<Float> = [[1.0, 0.0], [1.0, 0.0]]
有效是因为Tensor
也符合ExpressibleByArrayLiteral
.
这很好用:
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)
^~~~~~~~~~~~~~~~
为什么会这样?还有如何从 swift 中的数组创建张量。
您的第一个代码之所以有效,是因为它使用 文字 ,而不是使用已声明的变量(其类型已确定)来初始化 Tensor<Float>
。编译器对文字进行特殊处理。
您调用的 Tensor.init
的重载是 this。在您的情况下,它接受 ShapedArray<Float>
.
ShapedArray
符合协议 ExpressibleByArrayLiteral
,这意味着编译器可以将数组文字隐式转换为 ShapeArray
。但是,这仅限于文字,例如[[1, 0], [0, 1]]
,而不是引用数组类型变量的标识符,例如a
。 a
的类型被编译器推断为 [[Int]]
,编译器无法将 [[Int]]
隐式转换为 ShapedArray<Float>
。
虽然不那么重要,但 Float
符合 ExpressibleByIntegerLiteral
的事实(因此 1
和 0
可以转换为浮点数)也有助于允许你要编译的代码。
之所以var aa: Tensor<Float> = [[1.0, 0.0], [1.0, 0.0]]
有效是因为Tensor
也符合ExpressibleByArrayLiteral
.