Numpy中的矩阵运算

本文详细介绍了Numpy库中Matrix和Array的区别,包括它们之间的转换、矩阵乘法的不同函数(multiply(),dot(),matmul())以及转置和逆的使用。重点强调了矩阵运算时的一维向量处理和shape概念。
摘要由CSDN通过智能技术生成

一、Matrix和Array

        Matrix名为矩阵,Array名为阵列,它们都可以作为矩阵运算的结构,功能上Matrix是Array的子集,Matrix运算符相较于Array简单。本文章主要讲解Numpy中的Matrix和Array关于矩阵运算的区别,代码部分已经给出了运算结果,大家仔细体会就明白了。

二、Matrix和Array的相互转换

import numpy as np

a = [1, 2, 3]
b = [2, 3, 4]
c = [[1], [2], [3]]

print(type(a))  # list
print(np.mat(a))  # [[1 2 3]]
print(type(np.mat(a)))  # matrix:注意是二维
print(np.array(a))  # [1 2 3]
print(type(np.array(a)))  # ndarray
print(type(np.mat(np.array(a)))) #matrix

三、矩阵乘法--multiply()、dot()、 matmul()、' * '、'@'辨析

注意:所有的一维向单独看时,都当成是列向量(竖着放的),虽然打印的时候是横着放!!!

元素相乘:multply()
矩阵相乘:dot()、matmul()、’@’
’ * ': 在数组操作中,作为元素相乘;在矩阵操作中作为矩阵相乘

在数组Array上操作

a1 = np.array([[1,2,3],[4,5,6]])
b1 = np.array([1,2,3])
a2 = np.array([1,2,3])
b2 = np.array([1,2,3])

a1 * b1 # 对应元素相乘
[[ 1  4  9]
 [ 4 10 18]]

a1 @ b1 # 矩阵相乘
[14 32]

a2 * b2 # 对应元素相乘
[1 4 9]

a2 @ b2 # 矩阵相乘
14

np.multiply(a1, b1), np.multiply(a2, b2) # 对应元素相乘
(array([[ 1,  4,  9],
        [ 4, 10, 18]]), array([1, 4, 9]))

np.dot(a1, b1), np.dot(a2, b2) # 矩阵相乘
(array([14, 32]), 14)

np.matmul(a1, b1), np.matmul(a2, b2) # 矩阵相乘
(array([14, 32]), 14)

在矩阵上操作

a3 = np.matrix([[1,2,3],[4,5,6]])
b3_1 = np.matrix([1,2,3])
b3 = np.matrix([[1],[2],[3]])

a3 * b3 # 矩阵相乘
[[14]
 [32]]

a3 @ b3 # 矩阵相乘
[[14]
 [32]]

np.multiply(a3,b3_1) # 对应元素相乘
matrix([[ 1,  4,  9],
        [ 4, 10, 18]])

np.dot(a3, b3) # 矩阵相乘
matrix([[14],
        [32]])

np.matmul(a3, b3) # 矩阵相乘
matrix([[14],
        [32]])

四、矩阵的转置和逆

  关键点:注意矩阵是否可逆

# 转置
print(np.mat(a).T)
print(np.array(a).T)

# Matrix的逆为:
A = [[1, 2], [3, 4]]
print(np.mat(A).I)
# Array的逆为:
print(np.linalg.inv(A))

五、关于shape和一维向量

例如:a,b的shape为 (3, ),计算 a*b
关键就在这一步的转换,此处有两个向量相乘,那么:
谁在左边,就在左边添加维度1:a 在左,那么 a 的 shape 运算时为 (1,3)
谁在右边,就在右边添加维度1:b 在右,那么 b 的 shape 运算时为 (3,1)

a = np.array([[1, 2, 3], [4, 5, 6]])  # (2, 3)
b = np.array([1, 2, 3]) # (3,)
print(a.dot(b))  # [14 32]            (2,3)* (3,1) -> (2,1)
print(np.matmul(a, b))  # [14 32]     (2,3)* (3,1) -> (2,1)

# 如果是 b.dot(a)
# b 在左, (1, 3) * (2, 3)  报错
# 如果把 a 换成 (3,2),就可以运算

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

时间邮递员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值