【发布时间】:2013-05-31 12:29:44
【问题描述】:
通常在使用 numpy 时,我发现这种区别很烦人 - 当我从矩阵中提取一个向量或一行,然后使用 np.arrays 执行操作时,通常会出现问题。
为了减少头痛,为了简单起见,我有时只使用np.matrix(将所有np.arrays 转换为np.matrix)。但是,我怀疑会有一些性能影响。任何人都可以评论这些可能是什么以及原因吗?
如果它们都只是底层的数组,那么元素访问只是获取值的偏移量计算,所以如果不阅读整个源代码,我不确定可能会有什么区别。
更具体地说,这对性能有何影响:
v = np.matrix([1, 2, 3, 4])
# versus the below
w = np.array([1, 2, 3, 4])
谢谢
【问题讨论】:
-
是的,但我的问题是关于性能的,那篇文章中没有提到。我将编辑我的问题以使重点更加清晰。
-
我怀疑这是否会对性能产生任何重大影响,但如果不确切知道您在创建对象后对它做什么 的计划,就很难说。为什么不做一些测试功能,试试
timeit? -
@mgilson 是的,我当然会。我的问题也是“为什么不同”。例如,matlab 对此类数据结构的处理方式相同。所以我认为 numpy 的实现是有原因的。我的问题也是关于理解的。
-
matrix类是 numpy 的ndarray对象的子类,完全用 Python 实现。因此,您对matrix对象的每次调用都将需要一些额外的 Python 调用,主要是为了确保对象始终保持 2D。所以它可能比ndarray慢一点,尽管差异很可能可以忽略不计
标签: python performance numpy matrix numpy-ndarray