# 输入1
torch.tensor([1 + 1j])
# 报错信息
# RuntimeError: Could not infer dtype of complex
# 输入2
torch.tensor([1 + 1j], dtype=torch.complex128)
# 报错信息
# RuntimeError: Could not run 'aten::empty.memory_format' with arguments from the 'ComplexCPUTensorId' backend. 'aten::empty.memory_format' is only available for these backends: [SparseCPUTensorId, CPUTensorId, VariableTensorId, MkldnnCPUTensorId].
上面的内容是我在看官方文档时,看到有一下复数相关的api,想自己试用看看的,然后发现出现上面这些错误了,复制之后百度bing都查不到相关问题,再查看一下PyTorch支持的数据类型:
PyTorch中tensor数据类型只有上面9种,不包含complex,然后也没有找到有转换complex的函数,所以尝试了以下操作:
a = np.array([1 + 1j])
t = torch.from_numpy(a)
# 报错信息
# TypeError: can't convert np.ndarray of type numpy.complex128. The only supported types are: float64, float32, float16, int64, int32, int16, int8, uint8, and bool.
最后还看了下Github上的这篇文章 Are complex tensors on any plan? , 里面讲到由于使用complex number的人很少,所以复数的PyTorch实现暂时不在PyTorch的计划之中。
总结: PyTorch暂时不支持任何复数类型及操作。
附上官方文档中的陈述: