2017-03-18 40 views
1

如果我有一個numpy的陣列如何獲得所需的形狀numpy.linalg.norm

A=[[-4. -4. -4.] #(6,3) 
[-8. -8. -8.] 
[-1. -1. -1.] 
[-5. -5. -5.] 
[ 2. 2. 2.] 
[-2. -2. -2.]] 

我需要每一行的規範爲(2,3) 我的解決辦法是:

np.linalg.norm(A,axis=1) 

我的輸出

[6.92820323 13.85640646 1.73205081 8.66025404 3.46410162 3.46410162] 

需要的輸出是:

[[ 6.92820323 13.85640646] 
[ 1.73205081 8.66025404] 
[ 3.46410162 3.46410162]] 

我想只需一步就可以得到所需的輸出,而不會改變生成的numpy數組的大小。因爲我有一個大的數據集,我必須重複執行此操作。 有什麼建議嗎?

回答

0

您可以使用ndarray.reshape()來解決它

A=[[-4., -4., -4.], #(6,3) 
[-8., -8., -8.], 
[-1., -1., -1.], 
[-5., -5., -5.], 
[ 2., 2., 2.], 
[-2., -2., -2.]] 
A = np.array(A) 
ans = np.linalg.norm(A,axis=1).reshape((3,2)) 
+0

正如我所提到我想這一點沒有重塑所得numpy的陣列。 –

+0

對不起,我沒有看到。你想在一個步驟或只有一行代碼解決它? – xiaoyi

1

你確定這是值得的麻煩嗎?重塑是便宜:

a = np.random.random((6,3)) 
timeit(lambda: np.linalg.norm(a, axis=-1), number=10**6) 
# 5.118775532988366 

a = np.random.random((6,)) 
timeit(lambda: a.reshape(3, 2), number=10**6) 
# 0.36718635002034716 
相關問題