python中矩阵、数组使用@的含义

1.当@连接的两项为数组时,有两种计算形式:

(1)符合矩阵运算维度:(m×n)维×(n×y)维 =(m×y)维

运算方式与矩阵相乘类似:对应位置相乘再相加,运算期间类类型都为数组
例子见下:

a = np.arange(12).reshape(3,4)
b = np.arange(12).reshape(4,3)
print(a)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''
print(b)
'''
[[ 0  1  2]
 [ 3  4  5]
 [ 6  7  8]
 [ 9 10 11]]
'''
c = a @ b
print(c)
'''
[[ 42  48  54]
 [114 136 158]
 [186 224 262]]
'''
#<class 'numpy.ndarray'>

(2)不符合矩阵运算维度:(m×n)维×(1×n)维 =(1×m)维

运算方式为:第一个数组的第1行与第二个数组对应位置相乘相加后,得到结果的第1位,第一个数组的第2行与第二个数组对应位置相乘相加后,得到结果的第2位…
例子见下:

a = np.arange(12).reshape(3,4)
b = np.arange(4)
print(a)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''
print(b)
#[0 1 2 3]
c = a @ b
print(c)
'''
[14 38 62]
'''

2.当@连接的两项为矩阵时

维度必须符合矩阵运算:(m×n)维×(n×y)维 =(m×y)维

a = np.mat(np.arange(12).reshape(3,4)) #<class 'numpy.matrix'>
b = np.mat(np.arange(4).reshape(3,4))
print(a)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''
print(b)
'''
[[0]
 [1]
 [2]
 [3]]
'''
c = a @ b
print(c)
'''
[[14]
 [38]
 [62]]
'''

3.当@连接的两项一项为矩阵,一项为数组时

运算维度维度:(m×n)维×(1×n)维 =(1×m)维

运算方式为:第一个数组的第1行与第二个数组对应位置相乘相加后,得到最终结果的第1位,第一个数组的第2行与第二个数组对应位置相乘相加后,得到最终结果的第2位…
运算结果为矩阵

a = np.mat(np.arange(12).reshape(3,4))
b = np.arange(4)
c = a @ b
print(a)
'''
[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]
'''
print(b)
'''
[0 1 2 3]
'''
print(c)
#[[14 38 62]]

猜你喜欢

转载自blog.csdn.net/qq_46126258/article/details/107837659