python numpy
2022-04-05 16:48 jym蒟蒻 阅读(46) 评论(0) 编辑 收藏 举报python numpy常用操作
# 导入numpy
import numpy as np
# 生成numpy数组
x = np.array([1.0, 2.0, 3.0])
print(x) # [1. 2. 3.]
print(type(x)) # <class 'numpy.ndarray'>
# Numpy的算术运算
x = np.array([1.0, 2.0, 3.0])
y = np.array([2.0, 4.0, 6.0])
print(x+y) #[3. 6. 9.]
print(x-y) #[-1. -2. -3.]
print(x*y) # [ 2. 8. 18.]
print(x/y) #[0.5 0.5 0.5]
# Numpy的多维数组
A = np.array([[1, 2], [3, 4]])
print(A)
#[[1 2]
# [3 4]]
# 矩阵A的形状可以通过shape查看
print(A.shape)#(2, 2)
# 矩阵A的元素类型可以通过dtype查看
print(A.dtype)#int32
# 矩阵的算数运算:
B = np.array([[3, 0], [0, 6]])
print(A+B)
print(A*B)
print(A*10)
'''
[[ 4 2]
[ 3 10]]
[[ 3 0]
[ 0 24]]
[[10 20]
[30 40]]
'''
# 广播:形状不同的数组之间也可以进行运算
A = np.array([[1, 2], [3, 4]])
B = np.array([10, 20])
print(A*B)
'''
[[10 40]
[30 80]]
'''
# 访问元素
x = np.array([[51, 55], [14, 19], [0, 4]])
print(x)
'''
[[51 55]
[14 19]
[ 0 4]]
'''
# 访问第0行
print(x[0])#[51 55]
# 访问(0,1)的元素
print(x[0][1])#55
# 使用数组访问各个元素
# 将x转换为一维数组
x = x.flatten()
print(x)#[51 55 14 19 0 4]
# 获取索引为0,2,4的元素
print(x[np.array([0, 2, 4])])#[51 14 0]
# 取出大于15的元素
print(x[x > 15])#[51 55 19]
第一个例子:
import numpy as np
if __name__ == '__main__':
A=np.array([[1,2],[3,4]])
B=np.array([[5,6],[7,8]])
print(B)
print(np.ndim(B)) # 表示B是二维数组,也就是说有两列
print(B.shape) # 输出B的形状,几行几列
C=np.dot(A,B) # 矩阵相乘,需要满足矩阵乘法原则
print(C)
输出:
[[5 6]
[7 8]]
2
(2, 2)
[[19 22]
[43 50]]
第二个例子:
import numpy as np
if __name__ == '__main__':
A=np.array([1,2]) # 2*1
B=np.array([[1,3,5],[2,4,6]]) #2*3
print(A)
print(np.ndim(A))
print(A.shape)
print(B)
print(np.ndim(B))
print(B.shape)
C=np.dot(A,B) #1*3
print(C)
print(np.ndim(C))
print(C.shape)
结果:
[1 2]
1
(2,)
[[1 3 5]
[2 4 6]]
2
(2, 3)
[ 5 11 17]
1
(3,)
第三个例子:
import numpy as np
if __name__ == '__main__':
A=np.array([[1,2],[3,4],[5,6]]) # 3*2
B=np.array([[7],[8]]) #2*1
print(A)
print(np.ndim(A))
print(A.shape)
print(B)
print(np.ndim(B))
print(B.shape)
C=np.dot(A,B) #3*1
print(C)
print(np.ndim(C))
print(C.shape)
结果:
[[1 2]
[3 4]
[5 6]]
2
(3, 2)
[[7]
[8]]
2
(2, 1)
[[23]
[53]
[83]]
2
(3, 1)
第四个例子:
import numpy as np
if __name__ == '__main__':
A=np.array([[1,2],[3,4],[5,6]]) # 3*2
B=np.array([7,8])# 2*1
print(A)
print(np.ndim(A))
print(A.shape)
print(B)
print(np.ndim(B))
print(B.shape)
C=np.dot(A,B)
print(C)
print(np.ndim(C))
print(C.shape)
结果
[[1 2]
[3 4]
[5 6]]
2
(3, 2)
[7 8]
1
(2,)
[23 53 83]
1
(3,)
根据这里面2、3、4例子,可以总结出一个简便的理解思路。
一个矩阵乘一个向量,不用管那个向量究竟是行向量还是列向量。也不要管输出的向量是行向量还是列向量。因为我们的目的不是分辨它的形式是如何,而是要得到新向量里面的元素,所以就忽略它的存储形式。事实上,如果你非要弄清楚它的存储形式,那么你将被numpy的语法绕晕,把时间浪费到不重要的地方。
如果矩阵A是三行两列,一维向量B(也就是数组)里面有x个数,
x=矩阵的行的话,那么A乘以B就调用np.dot(B,A)
X=矩阵的列的话,那么A乘以B就调用np.dot(A,B)
用图来理解:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)