numpy 是什么
1. 简单来说,Numpy 是 Python 的一个科学计算包,包含了多维数组以及多维数组的操作。
2. Numpy 的核心是 ndarray 对象,这个对象封装了同种数据类型的n维数组
3. ndarray中的每个元素在内存中使用相同大小的块。 ndarray中的每个元素是数据类型对象的对象(称为 dtype)。
adarray:由两部分组成
① 实际的数据
② 描述这些数据的元数据
# 构建ndarray
import numpy as np # 导入包
# 方法一 :array
# np.array() 就相当于我们学习过的list,int,str等等,,将其他的数据类型转换为ndarray
# 基本语法
# np.array(data,dtype) # data :要转换的数据(包括列表,元祖,字符串,生成器),dtype :指定数据类型
a1=[1,2,3,4] # 列表
a2=(3,4,5) ## 元祖
a3=list("abcderfg") # 字符串 这里注意一下不能直接写成字符串形式,实际上是个由字符串构成的列表
n1=np.array(a1)
n2=np.array(a2)
n3=np.array(a3)
print(n1,n2,n3,sep="n") # 分隔符为换行
# 输出数组,注意数组的格式:中括号,元素之间没有逗号(和列表区分)
n2 # #jupyter交互方式下输出,会有array(数组),默认只输出最后一个
n3
# 生成器 range()----生成整数
# 语法range(start,end,step) start:起始值,end,结束值,step :步长,左闭又开(包括起始值,不包括结束值)
n1=range(10) # 只要一个数,默认是生成个数
n2=range(5,10) # 有两个参数时,第一个参数时start ,第二个是end
n3=range(0,10,2) # 有三个参数时,第三个是步长
a1=np.array(n1)
a2=np.array(n2)
a3=np.array(n3)
print(a1,a2,a3,sep="n")
# arange:Python内建函数range的数组版,返回一个数组。,range:不能生成小数型数组,arange可以生成
# 语法跟range一样的,注意一点的是,np.arange 直接生成数组,而不需要转换
n1=np.arange(10)
n2=np.arange(5,10)
n3=np.arange(0,10,2)
n4=np.arange(10.0) # 小数型
print(n1,n2,n3,n4,sep="n")
print(n4.dtype,n1.dtype,sep="n") # 查看数据类型 dtype方法
# 创建矩形时,会跟一维数组有什么不一样呢?
a1=[[1,2,3],[2,3,4]] # 二维列表,我刚开始学的时候,有几个中括号,我就判断几维
a2=[[1,2,3],["a","b","c"]] # 不同数据类型
a3=[[1,2,3],[6,7,8,9]]
n1=np.array(a1)
n2=np.array(a2)
n3=np.array(a3)
print(n1,n1.dtype)#
print() # 换行
print(n2,n2.dtype)
print()
print(n3,n3.dtype)
- 从上面的n3 结果来看,虽然不报错,也不建议,所以我们一般要求是,多维数组的中的每个元素中的元素的个数尽量一致
- n2原来列表来看是,有整数型,字符串型数据,但从结果来看,整数型变成字符串型了?为什么呢,下面我会讲的
- 核心:ndarray里面只能装同一种数据类型,且多维数组中的每个元素中的元素个数最好一致
# 浮点型我们一般是用float64,整型一般用int ,int8-32,
# 重点: ndarray里面只能装同一种数据类型,再重复一遍
#请记住,不同于 Python 列表,NumPy 要求数组必须包含同一类型的数据。如果类型不匹配,NumPy 将会向上转换(如果可行)。
#下面让我们来看一下什么叫做**向上转换**(也可以理解为向兼容性更强的方向转换).
# 字符串和其他类型的转换
L=[1,3,4,"1"]
L2=[1,2,3,"A"]
n1=np.array(L,dtype="int") # 结果报错,这里我注释,为了看结果,你们可以自己运行一下
#n2=np.array(L2,dtype="int")
print(n1,n1.dtype)
# 可以看到,向下转换时,数字字符串才可以向下转换,其他字符串不可以
[1 3 4 1] int32
# 从上面可以看到,转换类型的方式,有点不友好,是把其他数据类型转换为数组时,设置类型,但是要是已经数组的?怎样转换类型
# .astype()
a=[1,2,3,4]
n=np.array(a)
print(n,n.dtype)
print()
n1=n.astype(np.float64) # 变成浮点型,注意一点的是,转换类型时候,原数组不变,重新生成一个数组,再变换类型
print(n,n1,n1.dtype,sep="n")
[1 2 3 4] int32
[1 2 3 4]
[1. 2. 3. 4.]
float64
明天再更新