Python 将大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

我在计算大型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))
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数组吗?是的,希望上面的内容更有意义。