python - numpy np.array 与 np.matrix(性能)

标签 python performance numpy matrix numpy-ndarray

在使用 numpy 时,我经常发现这种区别很烦人 - 当我从矩阵中提取一个向量或一行,然后使用 np.array 执行操作时,通常会出现问题。

为了减少麻烦,为了简单起见,我有时只使用 np.matrix(将所有 np.arrays 转换为 np.matrix)。但是,我怀疑会有一些性能影响。任何人都可以评论这些可能是什么以及原因吗?

看起来如果它们都只是引擎盖下的数组,那么元素访问只是一个获取值的偏移量计算,所以如果不通读整个源代码我不确定可能有什么区别。

更具体地说,这对性能有什么影响:

v = np.matrix([1, 2, 3, 4])
# versus the below
w = np.array([1, 2, 3, 4])

谢谢

最佳答案

我添加了更多测试,当数组/矩阵较小时,array 似乎比 matrix 快得多,但对于较大的数据结构,差异会变小:

小 (4x4):

In [11]: a = [[1,2,3,4],[5,6,7,8]]

In [12]: aa = np.array(a)

In [13]: ma = np.matrix(a)

In [14]: %timeit aa.sum()
1000000 loops, best of 3: 1.77 us per loop

In [15]: %timeit ma.sum()
100000 loops, best of 3: 15.1 us per loop

In [16]: %timeit np.dot(aa, aa.T)
1000000 loops, best of 3: 1.72 us per loop

In [17]: %timeit ma * ma.T
100000 loops, best of 3: 7.46 us per loop

更大 (100x100):

In [19]: aa = np.arange(10000).reshape(100,100)

In [20]: ma = np.matrix(aa)

In [21]: %timeit aa.sum()
100000 loops, best of 3: 9.18 us per loop

In [22]: %timeit ma.sum()
10000 loops, best of 3: 22.9 us per loop

In [23]: %timeit np.dot(aa, aa.T)
1000 loops, best of 3: 1.26 ms per loop

In [24]: %timeit ma * ma.T
1000 loops, best of 3: 1.24 ms per loop

请注意,矩阵的乘法实际上稍快一些。

我相信我在这里得到的内容与@Jaime 对评论的解释是一致的。

关于python - numpy np.array 与 np.matrix(性能),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16929211/

相关文章:

python - 从 Pandas 数据框内的字典中提取值(Python)

mysql - "where id in(ids)"的性能?

python - 如何获得三对角托普利茨矩阵的实特征值和特征向量?

python - pandas 两个工作表内的最小值

python - 在 python 中将 timedelta 转换为 int 非常慢

Python:self 与 type(self) 以及类变量的正确使用

python - 是否可以使用 pandas dataframe 或任何其他方式插入日期而不考虑闰年 2 月 29 日?

python - 在 python 中成对使用 frozenset

php - Soap 服务器 - 性能问题(可能与 SQLite 相关)

perl 简单的效率和可读性