版权声明:转载请注明来源及作者,谢谢! https://blog.csdn.net/qq_42442369/article/details/84262687
What’s numpy?
一个在Python中做科学计算的基础库,重在数值计算,也是大部分PYTHON科学计算库的基础库,多用于在大型、多维数组上执行数值运算
1. 创建数组
import numpy as np
# 1. 创建数组
# 调用numpy下面的array方法
a = np.array([0,1,2,3])
# b = np.array([0,1,2,3,])
print(a)
# array后面的括号可以跟生成器range()也可以直接跟列表
b = np.array(range(4))
print(b)
# 第二种方法,numpy下的arange方法:别拼错了,只有一个r: a + range
c = np.arange(4)
print(c)
# 以上结果都是一维矩阵 [0 1 2 3]
# 看一下数据类名
print(type(d))
# <class 'numpy.ndarray'> # 数据的类名
# 看一下数据类型
print(d.dtype) # 数据的类型
# int32
# 数据类型见图
# 与列表结果区分一下: 列表是有逗号的 [0, 1, 2, 3]
print(list(range(4)))
# 创建二维数组
# 注意:np别掉了
m1 = np.array([np.arange(3),np.arange(3),np.arange(3)])
print(m1)
"""
[[0 1 2]
[0 1 2]
[0 1 2]]
"""
2. 查看数组形状(维度)
# 2. 查看数组形状(维度)
# 注意:不是方法
print(m1.shape) # (3, 3)
print(m1.shape[0]) # 第一维的元素个数 是个数个数个数!!!
# print(m1.reshape(2,5)) # 2*5一共有10个,根本就没有10个元素
# 报错:ValueError: cannot reshape array of size 9 into shape (2,5)
print(m1.reshape(9,1)) # 9*1=9=3*3
print(m1.shape) # (3, 3) m1还是3*3
# 将二维数组转化为一维数组
m2 = m1.flatten() # 注意和shape用法不一样,后面需要加括号
print(m2)
3. 数组和数的计算
# 3. 数组和数的计算
import numpy as np
# a = np.array([np.arange(5),np.arange(3),np.arange(7)])
# print(a)
# 注意:矩阵必须是规整的,值必须一样
a = np.array([np.arange(7),np.arange(7),np.arange(7)])
print(a)
"""
[[0 1 2 3 4 5 6]
[0 1 2 3 4 5 6]
[0 1 2 3 4 5 6]]
"""
print(a+1) # 每一位都加1
print(a*5)
print(a/2)
# 原理:numpy的广播机制,加减乘除的值被广播到所有元素
# 重点:不同维度数组计算
b = np.array([np.arange(5),np.arange(5)]) # 4*2
print(b)
c = np.array([np.arange(2),np.arange(2),np.arange(2),np.arange(2)]) # 2*5
print(c)
# b*c 就会报错:perands could not be broadcast together with shapes (2,5) (4,2)
# 广播原则,如果是二维数组:# 行和列至少有一个相同,且不同的俩中至少有1
# 如果是三维数组需要综合分析图
# 见图
#复习如何创建多维数组?
a = np.array([[1, 2, 3], [2, 3, 4]]) # 2*3
print(a.shape)
# # 把里面的np.arange(5)换成列表
# b = np.array([np.arange(2),np.arange(2)]) # 2*2
# print(b.shape)
# 把里面的np.arange(5)换成列表
# b = np.array([[1],[2]]) # 2*1
# print(b.shape)
b = np.array([[1, 2, 3]]) # 1*3
print(b.shape)
# b = np.array([[1, 2, 3],[1, 2, 3],[1, 2, 3]]) # 3*3
# print(b.shape)
print(a+b) # 行和列至少有一个相同,且不同的俩中至少有1
# 结果
# 2*3和2*1可以 2*3和2*2不行
# 2*3和1*3可以 2*3和3*3不行
# 重点:三维数组,及三维数组的计算
# shape为(3, 3, 3)意思是:有3块,每一块有3行3列
# 它与shape(3,2) 3行2列的时计算不来的 想象一个魔法,任意一面都和(3,2)不一样
# 想象一下图
# shape为(3, 3, 2) 与shape(3,2) 每一块与(3,2)计算可以
# 与(3,3)依然可以,因为是魔方总有一面是3*3