[英]Weird results when multiplying large numpy array with itself
在計算大型Numpy數組時,我遇到了奇怪的結果。
A=np.matrix('1 2 3;3 4 7;8 9 6')
A=([[1, 2, 3],
[3, 4, 7],
[8, 9, 6]])
A * A按預期完成點積:
A*A=([[ 31, 37, 35],
[ 71, 85, 79],
[ 83, 106, 123]])
但是,使用更大的矩陣200X200時,我會得到不同的響應:
B=np.random.random_integers(0,10,(n,n))
B=array([[ 2, 0, 6, ..., 7, 3, 7],
[ 4, 9, 1, ..., 6, 7, 5],
[ 3, 1, 8, ..., 7, 3, 8],
...,
[ 8, 4, 10, ..., 5, 4, 4],
[ 6, 6, 3, ..., 7, 2, 9],
[ 2, 10, 10, ..., 5, 7, 4]])
現在將B乘以B
B*B
array([[ 4, 0, 36, ..., 49, 9, 49],
[ 16, 81, 1, ..., 36, 49, 25],
[ 9, 1, 64, ..., 49, 9, 64],
...,
[ 64, 16, 100, ..., 25, 16, 16],
[ 36, 36, 9, ..., 49, 4, 81],
[ 4, 100, 100, ..., 25, 49, 16]])
我得到每個元素的平方,而不是矩陣*矩陣我做了什么不同?
您似乎使用matrix
類型創建了A
,而B
是ndarray
類型的( np.random.random_integers
返回一個數組,而不是矩陣)。 運算符*
對前者執行矩陣乘法,而對后者執行逐元素乘法。
從np.matrix
的文檔中:
矩陣是專用的二維數組,可通過操作保留其二維性質。 它具有某些特殊的運算符,例如*(矩陣乘法)和**(矩陣冪)。
順便說一句,如果您在同一操作中使用兩種不同類型,則NumPy將使用優先級最高的元素所屬的運算符:
>>> A = np.matrix('1 2 3;3 4 7;8 9 6')
>>> B = np.array(A) # B is of array type, A is of matrix type
>>> A * B
matrix([[ 31, 37, 35],
[ 71, 85, 79],
[ 83, 106, 123]])
>>> B * A
matrix([[ 31, 37, 35],
[ 71, 85, 79],
[ 83, 106, 123]])
>>> A.__array_priority__
10.0
>>> B.__array_priority__
0.0
由於B
的類型為numpy.ndarray
而不是numpy.matrix
因此您會得到此結果
>>> type(np.random.random_integers(0,10,(n,n)))
<type 'numpy.ndarray'>
改為使用
B=np.matrix(np.random.random_integers(0,10,(n,n)))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.