3.5 张量元素类型
到目前为止,我们已经介绍了张量如何工作的基础知识,但是我们还没有涉及可以在Tensor中存储哪些类型的数字类型。 正如我们在3.2节中所暗示的那样,使用标准Python数字类型可能不是最优的,原因有以下几种:
1、Python中的数字是对象。 例如,在浮点数可能只需要在计算机上表示32位的情况下,Python会将其转换为具有引用计数的完整Python对象,依此类推。 如果我们需要存储少量数字,则这种称为装箱的操作就不成问题,但是分配数百万则效率很低。
2、Python中的列表用于对象的顺序集合。 没有定义用于有效地将两个向量的点积或向量求和在一起的操作。 同样,Python列表无法优化其内容在内存中的布局,因为它们是指向Python对象(任何类型,而不仅仅是数字)的可索引指针集合。 最后,Python列表是一维的,尽管我们可以创建列表列表,但效率仍然很低。
3、与经过优化的编译后的代码相比,Python解释器的速度较慢。 使用以编译的,低级语言(例如C)编写的优化代码,对大量数值数据执行数学运算可以更快。
由于这些原因,数据科学库依赖于NumPy或引入专用数据结构(例如PyTorch张量),这些数据结构提供了方便的高级API封装的数字数据结构及其相关操作的高效低层实现。 为此,张量内的对象必须全部是相同类型的数字,并且PyTorch必须跟踪此数字类型。
网友评论