2013-04-23 44 views
2

我正在嘗試使用numpy,我無法弄清楚如何在numpy中正確定義一個n by n矩陣。 我已使用numpy.zeros(n,n) ...但我不確定它是否可以。在numpy中定義和乘上矩陣(python)

這樣使用numpy是否正確? 即時通訊設法獲取(matrix^T * vector) - vector

matrix = np.zeros((n,n)) 
start = [(1/float(n)) for _ in range(n)] 
vector = np.array(start) 
newvector = np.dot(np.transpose(matrix) , vector) 
ans= np.subtract(newvector , vector) 

我問這是因爲即時得到錯誤的結果和林不知道哪裏是我的問題

+1

如果您通過任何載體乘以零矩陣,你會得到一個零向量。因此,我想'ans'的條目全部等於'-1/n',這與您發佈的代碼一致。請給出你的代碼的結果和你期望的結果! – 2013-04-23 12:58:44

+0

我沒有看到任何問題,代碼似乎沒問題 – jabaldonedo 2013-04-23 13:00:28

回答

1

基本上你是對你如何使用numpy的。爲了簡化使用,我會以不同的方式編寫起始矢量,並使用對象方法來計算所需的值。

n = 10 

matrix = np.zeros((n, n)) 
vector = np.ones((n,)) * 1.0/n 
new_vector = matrix.T.dot(vector) 
ans = new_vector - vector 

print ans 

>>> [-0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1 -0.1] 

輸出應該是正確的(矩陣時間矢量應該是一個充滿零的矢量,減去一個除以十,瞧)。我十分不知道N×M矩陣的一般形式和轉置的使用(這將需要一分鐘的時間去思考;-))

2

要定義numpy矩陣,你有幾種選擇:

  • numpy.zeros定義了填充零的矩陣。
  • numpy.ones定義了填充1的矩陣。
  • numpy.array定義了基於其他的東西(一個列表,例如)矩陣
  • numpy.empty定義了一個矩陣,而不給它分配值(所以它包含當前是內存中爲它分配的地方是什麼)。

所有這些函數使用矩陣的維度作爲第一個參數的元組。這就是括號加倍的原因。

使用numpy,您可以使用任何常用的運算符(+, - ,* /,**),這些運算符都是按元素執行的。

要執行矩陣乘法,您需要使用numpy.dot函數。

然後,您可以WIRTE你作爲:

n = 10 
matrix = numpy.zeros((n,n)) 
vector = numpy.ones(n)/n 
newvector = numpy.dot(matrix.T, vector) 
ans = newvector - vector 

但我想這matrix應大於零矩陣別的東西,或者不需要轉置操作。

1

除了@CharlesBrunet的答案,還有一個專門的數學矩陣類,其中A*B是標準矩陣乘法(而不是元素方式)。

numpy.matrix

返回一個矩陣從陣列狀物體,或從數據的字符串。矩陣是一個專門的二維數組,通過操作保留其2-D特性。它有一些特殊的運算符,如*(矩陣乘法)和**(矩陣功率)。從文檔

創建示例:

>>> a = numpy.matrix('1 2; 3 4') 
>>> print a 
[[1 2] 
[3 4]] 
>>> numpy.matrix([[1, 2], [3, 4]]) 
matrix([[1, 2], 
     [3, 4]])