如何用numpy创建单一矩阵

Joh*_*åde 8 python numpy

如何用numpy 创建一个单位矩阵?是否有比语法更简单的语法

numpy.matrix(numpy.identity(n))
Run Code Online (Sandbox Code Playgroud)

kwg*_*man 13

这是一个更简单的语法:

np.matlib.identity(n)
Run Code Online (Sandbox Code Playgroud)

这是一个更简单的语法,运行速度更快:

In [1]: n = 1000
In [2]: timeit np.matlib.identity(n)
100 loops, best of 3: 8.78 ms per loop
In [3]: timeit np.matlib.eye(n)
1000 loops, best of 3: 695 us per loop
Run Code Online (Sandbox Code Playgroud)

  • 你需要使用`matlib`吗?你不能只做`np.eye(n)`?`matlib`专门生成矩阵,而不是产生numpy数组的"普通"numpy函数. (2认同)
  • 根据文档,似乎 np.eye 不一定创建方阵。至于使用 np.matlib.eye 的性能增益,我不确定。 (2认同)

Ano*_*ffy 8

此外,np.eye可用于创建标识数组(In).

例如,

>>> np.eye(2, dtype=int)
array([[1, 0],
       [0, 1]])
>>> np.eye(3, k=1)
array([[ 0.,  1.,  0.],
       [ 0.,  0.,  1.],
       [ 0.,  0.,  0.]])
Run Code Online (Sandbox Code Playgroud)


Sve*_*ach 5

我认为没有更简单的解决方案.但是,您可以稍微提高效率:

numpy.matrix(numpy.identity(n), copy=False)
Run Code Online (Sandbox Code Playgroud)

这避免了不必要地复制数据.

  • 我从未使用过`np.identity`,总是使用眼睛..你知道`np.eye`和这个有什么区别吗? (2认同)
  • @wim:根据[docs](http://docs.scipy.org/doc/numpy/reference/generated/numpy.eye.html),np.eye`就像`np.identity`但附加功能.您可以指定列大小并将对角线移开. (2认同)