从swift数组创建张量

从swift数组创建张量,swift,tensorflow,swift-for-tensorflow,Swift,Tensorflow,Swift For Tensorflow,这很好: 导入TensorFlow var t=张量([[1,0],[0,1]]) 但是下面给出了一个错误 导入TensorFlow 变量a=[[1,0],[0,1]] var t=张量(a) 错误:表达式类型“Tensor”不明确,没有更多上下文 var t=张量(a) ^~~~~~~~~~~~~~~~ 为什么会发生这种情况?还有,如何从swift中的数组创建张量 您的第一个代码之所以有效,是因为它使用了文本,而不是已经声明的变量(其类型已经确定)来初始化张量。文本由编译器进行特殊处理

这很好:

导入TensorFlow
var t=张量([[1,0],[0,1]])
但是下面给出了一个错误

导入TensorFlow
变量a=[[1,0],[0,1]]
var t=张量(a)
错误:表达式类型“Tensor”不明确,没有更多上下文
var t=张量(a)
^~~~~~~~~~~~~~~~

为什么会发生这种情况?还有,如何从swift中的数组创建张量

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

正在调用的
Tensor.init
的重载为。在您的情况下,它接受一个
ShapedArray

符合协议
ExpressibleByArrayLiteral
,这意味着编译器可以隐式地将数组文字转换为
ShaperRay
。但是,这仅限于文本,例如
[[1,0],[0,1]]
,而不限于引用数组类型变量的标识符,例如
a
<代码>一个
的类型被编译器推断为一个
[[Int]]
,并且编译器不能隐式地将
[[Int]]
转换为
形状数组

虽然不太重要,但是
Float
符合
ExpressibleByIntegerLiteral
(因此
1
0
可以转换为Float)这一事实在允许代码编译方面也起到了作用


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

什么是张量?如果它是typeOf[[1,0],[0,1]],你只需要写一个不带typecastTensor的a=t就可以了。CastTensor创建一个张量。[[1,0],[0,1]]的类型是数组。我想要一个张量,而不是一个数组。如果你要写var a:tensor=[[1,0],[0,1]]?var t:tensor=a真的有效吗?我没想到…@Swair,因为使用SomeClass(myClass)实际上意味着SomeClass.init(typeOf:Any),您可以编写一个扩展并将自己的init func添加到类型转换数组中
error: expression type 'Tensor<Float>' is ambiguous without more context
var t = Tensor<Float>(a)
        ^~~~~~~~~~~~~~~~