Python 将大numpy数组与自身相乘时会出现奇怪的结果
我在计算大型Numpy数组时遇到了奇怪的结果Python 将大numpy数组与自身相乘时会出现奇怪的结果,python,arrays,numpy,Python,Arrays,Numpy,我在计算大型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按预期完成dot产品: A*A=([[ 31, 37, 35], [ 71, 85, 79], [ 83, 106, 123]]) 但对于更大的矩阵200X200,我得到了不同的响应: B=np.random.random_integers(0,10,(n,n
A=np.matrix('1 2 3;3 4 7;8 9 6')
A=([[1, 2, 3],
[3, 4, 7],
[8, 9, 6]])
A*A按预期完成dot产品:
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]])
我得到每个元素的平方,而不是一个矩阵
我做了什么不同的事 您似乎使用
矩阵
类型创建了A
,而B
属于ndarray
类型(np.random.random_integers
返回数组,而不是矩阵)。运算符*
对前者执行矩阵乘法,对后者执行元素乘法
从np.矩阵的
矩阵是一种特殊的二维数组,通过运算保持其二维性质。它有一些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)
另外,如果在同一操作中使用两种不同的类型,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
您似乎使用矩阵类型创建了A
,而B
属于ndarray
类型(np.random.random_integers
返回数组,而不是矩阵)。运算符*
对前者执行矩阵乘法,对后者执行元素乘法
从np.矩阵的
矩阵是一种特殊的二维数组,通过运算保持其二维性质。它有一些特殊的运算符,例如*(矩阵乘法)和**(矩阵幂)
另外,如果在同一操作中使用两种不同的类型,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
的类型为numpy.ndarray
而不是numpy.matrix
>>> type(np.random.random_integers(0,10,(n,n)))
<type 'numpy.ndarray'>
A
是numpy数组吗?是的,希望上面的内容更有意义。A
是numpy数组吗?是的,希望上面的内容更有意义。