目录
1.array创建对象
1.1定义一维数组
1.2定义二维数组
2.Numpy的数据类型
3.数据类型标识码
4.array的API
4.1astype()
4.2max()
4.3min()
4.4sum()
4.5reshape()
4.6random.rand()
5.数组属性
5.1ndim
5.2shape
5.3itemsize
5.4flags
6.创建数组方法
6.1arrage()
6.2empty()
6.3zeros()
6.4ones()
6.5arange()
6.6linspace()
7.切片
7.1slice(start,stop,step)
7.2[start:stop:step]
8.高级索引
8.1整数数组索引
8.2bool索引
9.广播
9.1一维数组与标量相加
1.array创建对象
numpy.array(object, dtype = None, copy = True, order = None,ndmin = 0)
参数说明:
序号 | 参数 | 描述说明 |
---|---|---|
1 | object | 表示一个数组序列 |
2 | dtype | 可选参数,通过它可以更改数组的数据类型 |
3 | copy | 可选参数,表示数组能否被复制,默认是 True |
4 | order | 以哪种内存布局创建数组,有 3 个可选值,分别是 C(行序列)/F(列序列)/A(默认) |
5 | ndmin | 用于指定数组的维度 |
1.1定义一维数组
arr = np.array([10, 20, 30, 40])
print(arr)
1.2定义二维数组
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4)
2.Numpy的数据类型
序号 | 数据类型 | 语言描述 |
---|---|---|
1 | bool_ | 布尔型数据类型(True 或者 False) |
2 | int_ | 默认整数类型,类似于 C 语言中的 long,取值为 int32 或 int64 |
3 | intc | 和 C 语言的 int 类型一样,一般是 int32 或 int 64 |
4 | intp | 用于索引的整数类型(类似于 C 的 ssize_t,通常为 int32 或 int64) |
5 | int8 | 代表与1字节相同的8位整数。值的范围是-128到127 |
6 | int16 | 代表 2 字节(16位)的整数。范围是-32768至32767 |
7 | int32 | 代表 4 字节(32位)整数。范围是-2147483648至2147483647 |
8 | int64 | 表示 8 字节(64位)整数。范围是-9223372036854775808至9223372036854775807 |
9 | uint8 | 1字节(8位)无符号整数 |
10 | uint16 | 2 字节(16位)无符号整数 |
11 | uint32 | 4 字节(32位)无符号整数 |
12 | uint64 | 8 字节(64位)无符号整数 |
13 | float_ | float64 类型的简写 |
14 | float16 | 半精度浮点数,包括:1 个符号位,5 个指数位,10个尾数位 |
15 | float32 | 单精度浮点数,包括:1 个符号位,8 个指数位,23个尾数位 |
16 | float64 | 双精度浮点数,包括:1 个符号位,11 个指数位,52个尾数位 |
17 | complex_ | 复数类型,与 complex128 类型相同 |
18 | complex64 | 表示实部和虚部共享 32 位的复数 |
19 | complex128 | 表示实部和虚部共享 64 位的复数 |
20 | str_ | 表示字符串类型 |
21 | string_ | 表示字节串类型 |
3.数据类型标识码
字符 | 对应类型 |
---|---|
b | 代表布尔型 |
i | 带符号整型 |
u | 无符号整型 |
f | 浮点型 |
c | 复数浮点型 |
m | 时间间隔(timedelta) |
M | datatime(日期时间) |
O | Python对象 |
S,a | 字节串(S)与字符串(a) |
U | Unicode |
V | 原始数据(void) |
4.array的API
4.1astype()
转换数据类型
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.dtype)
arr41=arr4.astype(float)
print(arr41)
print(arr41.dtype)
4.2max()
求数组最大元素
4.3min()
求数组最小元素
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.max())
print(arr4.min())
4.4sum()
求和
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.sum(axis=1))
print(arr4.sum(axis=0))
print(arr4.sum())
二维数组中
行:axis=1
列:axis=0
4.5reshape()
返回修改维度后的数组
arr4 = np.array([[1,2,3,4,5,6]])
print(arr4.reshape(2,3))
print(arr4.reshape(3,-1))
-1表示形状占位符,numpy自动根据元素组的长度进行计算
order='C'
按行填充
arr52 = np.array([1,2,3,4,5,6,7,8])
print(arr52.reshape((2, 4), order='C'))
order='F'
按列填充
arr51 = np.array([1,2,3,4,5,6,7,8])
print(arr51.reshape((2, 4), order='F'))
4.6random.rand()
生成指定数量的标准正态分布数据,均值:0,方差:1
arr = np.random.randn(10)
print(arr)
生成一个3行3列的二维正太分布的样本数据
arr1 = np.random.randn(3,3)
print(arr1)
5.数组属性
5.1ndim
查看数组维度
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.ndim)
5.2shape
(1)查看数组的维度
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.shape)
(2)修改数组维度
直接在原数组上修改维度
arr5 = np.array([1,2,3,4,5,6,7,8])
arr5.shape=(2,4)
print(arr5)
5.3itemsize
返回数组中的元素的字节大小
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.itemsize)
5.4flags
显示数据在内存的存储信息
arr4 = np.array([[1,2,3],[4,5,6]])
print(arr4.flags)
6.创建数组方法
6.1arrage()
6.2empty()
numpy.empty(shape, dtype = float, order = 'C')
创建一个数组,以随机数填充
arr6 = np.empty((3,4))
print(arr6)
6.3zeros()
创建一个数组,以0填充
numpy.zeros(shape, dtype = float, order = 'C')
arr7 = np.zeros((2,3),order='C')
print(arr7)
6.4ones()
numpy.ones(shape, dtype = None, order = 'C')
创建一个数组,以1填充
arr8 = np.zeros((3,3),dtype="i4",order='C')
print(arr8)
6.5arange()
numpy.arange(start, stop, step, dtype)
arr91 = np.arange(9)
print(arr91)
arr92 = np.arange(1,20,2)
print(arr92)
arr93 = np.arange(-1,-10,-3,dtype="i1")
print(arr93)
arr94 = np.arange(-0.1,-1,-0.2)
print(arr94)
6.6linspace()
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
参数 | 描述 |
---|---|
start | 起始值,默认为 0 |
stop | 终止值 |
num | 表示数值区间内要生成多少个均匀的样本,默认值为 50 |
endpoint | 默认为 True,表示数列包含 stop 终止值,反之不包含 |
retstep | 表示是否返回步长。如果为 True,则返回一个包含数组和步长的元组;如果为 False,则只返回数组。默认为 False。 |
dtype | 返回 ndarray 的数据类型,默认为 None,表示根据输入参数自动推断数据类型。 |
如果endpoint=True,step=(stop-start)/(num-1)
如果endpoint=False,step=(stop-start)/num
arr10 = np.linspace(10,100,10)
print(arr10)
arr11 = np.linspace(1,9,5,endpoint=False,retstep=True)
print(arr11)
arr12 = np.linspace(1,9,5,endpoint=True,retstep=True)
print(arr12)
7.切片
7.1slice(start,stop,step)
切片范围粗糙,start:开始的行数,stop:结束的行数(不包含)
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[slice(0,len(arr),1)])
7.2[start:stop:step]
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[...,1])# 第2列元素
print(arr[1,...])# 第2行元素
print(arr[1:3,...]) # 第1,2行所有元素
print(arr[...,1:2]) # 第2列的所有元素
print(arr[1:2,1:2])# 第2行第2列元素
8.高级索引
8.1整数数组索引
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
#[0,1,0]为行索引,[0,1,2]为列索引,两者相应位置组合为要索引的位置
print(arr[[0,1,0],[0,1,2]])
8.2bool索引
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
- 用比较运算符进行索引
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr>5)
print(arr[arr>5])
- 用逻辑运算符进行索引
arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(arr[~(arr>5)])
逻辑运算符:
-
&:与运算
-
|:或运算
-
~:非运算,取反
9.广播
对数组在横向或纵向上进行一定次数的重复进行填充, 使参与运算的数组维度相同.
广播规则
-
维度匹配:如果两个数组的维度数不同,维度数较少的数组会在前面补上长度为 1 的维度。
-
长度匹配:如果两个数组在某个维度上的长度不同,但其中一个数组在该维度上的长度为 1,则该数组会沿着该维度进行广播。
-
不匹配:如果两个数组在某个维度上的长度既不相同也不为 1,则广播失败,抛出 ValueError。
理解:需要扩充的维度,复制样本为1.
9.1一维数组与标量相加
arr1 = np.array([1, 2, 3])
print(arr1+10)
9.2二维数组与一维数组相加
arr1 = np.array([[1,2,3],[4,5,6],[7,8,9]])
arr2 = np.array([4,3,2])
print(arr1+arr2)
9.3二维数组与二维数组相加
arr1 = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
arr2 = np.array([[4], [5], [6]])
print(arr1 + arr2)