2012-06-07 80 views

回答

13

這裏有一個簡單的語法:

np.matlib.identity(n) 

這裏是一個運行得更快更簡單的語法:

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 
+2

你需要使用'matlib'嗎?你不能只是做'np.eye(n)'? 'matlib'專門生成矩陣,而不是產生numpy數組的「正常」numpy函數。 –

+0

根據文檔,似乎np.eye不一定創建正方形矩陣。至於使用np.matlib.eye的性能增益,我不確定。 – hlin117

5

我不認爲這是一個簡單的解決。你可以稍微更有效地做到這一點,雖然:

numpy.matrix(numpy.identity(n), copy=False) 

這避免了不必要的數據複製。

+2

我從來沒有使用'np.identity',總是用眼睛..你知道什麼是'np.eye'而這其中的區別? – wim

+0

@wim:沒有區別。 'numpy.eye()'更靈活一點。 NumPy的界面並不是非常流暢,並且存在許多具有重疊功能的功能。 –

+2

@wim:根據[docs](http://docs.scipy.org/doc/numpy/reference/generated/numpy.eye.html)'np.eye'就像'np.identity',但添加了功能。您可以指定列大小並移動對角線。 –

4

np.eye可以用來創建一個身份陣列(在)。

例如,

>>> 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.]]) 
+0

這是爲什麼downvoted? –

+0

我也想知道... – mbdevpl