numpy模块
numpy简介
numpy官方文档:https://docs.scipy.org/doc/numpy/reference/?v=20190307135750
numpy是Python的一种开源的数值计算扩展库。这种库可用来存储和处理大型numpy数组,比Python自身的嵌套列表结构要高效的多(该结构也可以用来表示numpy数组)。
numpy库有两个作用:
- 区别于list列表,提供了数组操作、数组运算、以及统计分布和简单的数学模型
- 计算速度快,甚至要由于python内置的简单运算,使得其成为pandas、sklearn等模块的依赖包。高级的框架如TensorFlow、PyTorch等,其数组操作也和numpy非常相似。
numpy使用
import numpy as np
lt1 = [1,2,3]
lt2 = [4,5,6]
arry1 = np.array(lt1)
arry2 = np.array(lt2)
print(arry1*arry2) # [ 4 10 18]
创建numpy数组
# 一维数组
arr1 = np.array([1,2,4])
print(type(arr1), arr1) # <class 'numpy.ndarray'> [1 2 4]
# 二维数组
arr = np.array([
[1,2,3],
[4,5,6]
])
print(arr)
'''
[[1 2 3]
[4 5 6]]
'''
# 三维数组
arr = np.array([
[[1, 2, 3],
[4, 5, 6]],
[[1, 2, 3],
[4, 5, 6]]
])
print(arr)
'''
[[[1 2 3]
[4 5 6]]
[[1 2 3]
[4 5 6]]]
'''
numpy数组的常用属性
属性 | 解释 |
---|---|
T | 数组的转置(对高维数组而言) |
dtype | 数组元素的数据类型 |
size | 数组元素的个数 |
ndim | 数组的维数 |
shape | 数组的维度大小(以元组形式) |
astype | 类型转换 |
dtype 数组元素的数据类型,numpy数组是属于python解释器的,int32 / float64 属于numpy
# 转置
arr = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(f'arr的转置为\n{arr.T}')
'''
arr的转置为
[[1 4]
[2 5]
[3 6]]
'''
# dtype数据类型
arr = np.array([
[1., 2., 3.],
[4, 5, 6]
])
print(arr.dtype) # float64
# 数组元素的个数
print(arr.size) # 6
# 数组的维数
print(arr.ndim) # 2
# 数组的维度大小(以元组形式, 几行几列)
print(arr.shape) # (2,3)
# 数组类型转换
arr = np.array([
[1, 2, 3],
[4, 5, 6]
])
res = arr.astype(np.float64)
print(res)
'''
[[1. 2. 3.]
[4. 5. 6.]]
'''
切割numpy数组
切分数组类似于列表的切割,numpy数组的切割涉及到行和列的切割
arr = np.array([
[1, 2, 3],
[4, 5, 6]
])
print(arr[:,:]) # 行;列 取整个数组
print(arr[0,0]) # 取第一行第一列,1
print(arr[0,:]) # 取第一行 [1 2 3]
print(arr[:,2:]) # 取第三列
'''
[[3]
[6]]
'''
赋值
arr = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr[0,0] = 0
print(arr) # 将二维数组第一行第一列元素赋值为0
arr[:,:] = 0
print(arr) # 全部换为0
'''
[[0 0 0]
[0 0 0]]
'''
元组合并
# 水平合并
arr1 = np.array([
[1, 2, 3],
[4, 5, 6]
])
arr2 = np.array([
[7, 8, 9],
['a', 'b', 'c']
])
print(np.hstack((arr1,arr2))) # 只能放元组
'''
[['1' '2' '3' '7' '8' '9']
['4' '5' '6' 'a' 'b' 'c']]
'''
# 垂直合并
print(np.vstack((arr1, arr2)))
'''
[['1' '2' '3']
['4' '5' '6']
['7' '8' '9']
['a' 'b' 'c']]
'''
print(np.concatenate((arr1, arr2))) # 默认以列合并
'''
[['1' '2' '3']
['4' '5' '6']
['7' '8' '9']
['a' 'b' 'c']]
'''
print(np.concatenate((arr1, arr2), axis=1)) # 以行合并
'''
[['1' '2' '3' '7' '8' '9']
['4' '5' '6' 'a' 'b' 'c']]
'''
通过函数创建数组
方法 | 详解 |
---|---|
array() | 将列表转换为数组,可选择显式指定dtype |
arange() | range的numpy版,支持浮点数 |
linspace() | 类似arange(),第三个参数为数组长度 |
zeros() | 根据指定形状和dtype创建全0数组 |
ones() | 根据指定形状和dtype创建全1数组 |
eye() | 创建单位矩阵 |
empty() | 创建一个元素全随机的数组 |
reshape() | 重塑形状 |
ones / zeros / eye / empty
# ones
print(np.ones((2,3))) # 构建两行三列的1
'''
[[1. 1. 1.]
[1. 1. 1.]]
'''
# zeros
print(np.zeros((2,3))) # 创建2行3列的0
'''
[[0. 0. 0.]
[0. 0. 0.]]
'''
# eye
print(np.eye(3,3)) # 创建单位矩阵
'''
[[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]
'''
# empty
print(np.empty((2,2))) # 创建一个2行2列的数组,里面的元素是随机生成的
'''
[[1.42419938e-306 9.34609790e-307]
[1.29060871e-306 7.56601165e-307]]
'''
linspace / logspace
print(np.linspace(1,100,10)) # 创建一个等差数列,1-100,有10个数
# [ 1. 12. 23. 34. 45. 56. 67. 78. 89. 100.]
print(np.logspace(1,10,5)) # 创建等比数列、
# [1.00000000e+01 1.77827941e+03 3.16227766e+05 5.62341325e+07 1.00000000e+10]
arrange
print(np.arang