通常在使用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])
感谢
答案 0 :(得分:5)
SciPy.org和this question上有一般性的讨论。
为了比较性能,我在iPython中做了以下几点。事实证明,阵列明显更快。
In [1]: import numpy as np
In [2]: %%timeit
...: v = np.matrix([1, 2, 3, 4])
100000 loops, best of 3: 16.9 us per loop
In [3]: %%timeit
...: w = np.array([1, 2, 3, 4])
100000 loops, best of 3: 7.54 us per loop
因此,numpy数组似乎比numpy矩阵具有更快的性能。
使用的版本:
Numpy:1.7.1
IPython:0.13.2
Python:2.7
答案 1 :(得分:5)
我添加了一些测试,当数组/矩阵较小时,array
似乎比matrix
快得多,但对于较大的数据结构,差异会变小:
小:
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
放大:
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解释评论的内容一致。