2014-01-10 122 views
4

的規範我有這個numpy的陣列創建numpy的陣列

X = [[ -9.03525007 7.45325017 33.34074879][ -6.63700008 5.13299996 31.66075039][ -5.12724996 8.25149989 30.92599964][ -5.12724996 8.25149989 30.92599964]] 

我想使用numpy的數組的常態。我怎樣才能做到這一點?

對內部每個數組,我需要的sqrt(X2 + Y2 + Z2),所以我的輸出wull是4個值的數組(因爲有4個內部數組)

+0

您可以定義 「規範」? – mgilson

+0

這意味着每個數組裏面,我需要sqrt(x2 + y2 + z2),所以我的輸出wull是4個數組的數組(因爲裏面有4個數組) – sam

回答

2

要得到你要求什麼(2你陣列中每一行的範數),你可以使用axis參數numpy.linalg.norm

import numpy 
x = numpy.array([[ -9.03525007, 7.45325017, 33.34074879], 
       [ -6.63700008, 5.13299996, 31.66075039], 
       [ -5.12724996, 8.25149989, 30.92599964], 
       [ -5.12724996, 8.25149989, 30.92599964]]) 
print numpy.linalg.norm(x, axis=1) 

=> 

array([ 35.33825423, 32.75363451, 32.41594355, 32.41594355]) 
1

您的意思是矩陣範(S)?如果是這樣的:

import numpy as np 
>>> xs = [[ -9.03525007, 7.45325017, 33.34074879], [-6.63700008, 5.13299996, 31.66075039], [-5.12724996, 8.25149989, 30.92599964], [-5.12724996, 8.25149989, 30.92599964]] 
>>> np.linalg.norm(xs) 
66.506988943656381 

參見:http://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html

2

爲什麼不使用numpy.linalg.norm

import numpy 

x = [[ -9.03525007, 7.45325017 , 33.34074879], [ -6.63700008 , 5.13299996 , 31.66075039], [ -5.12724996 , 8.25149989 , 30.92599964], [ -5.12724996 , 8.25149989 , 30.92599964]] 

print numpy.linalg.norm(x) 

輸出:

66.5069889437 
+0

嘿嘿不錯:) –

+0

謝謝。但如果我需要規範(2)這意味着這個輸入,我會得到一個具有4個值的數組。 [norm(x),norm(y),norm(z)] – sam

0

其他人已經給了你norm()功能。您可能正在尋找map()陣列中的norm()函數。

只要做到:

from numpy.linalg import norm 
norms = map(norm, x)