Numpy的使用
1.创建数组
| 函数 | 功能 |
|---|---|
| array(x) | 根据列表或元组x创建数组(数组可能是多维的) |
| arange(x, y, i) | 创建一维数组,元素等价于range(x, y, i) |
| linspace(x, y, n) | 创建一个由区间[x, y]的n-1等分点构成的一维数组,包含x和y |
| random.randint(x,y,n) | 创建一个一维数组,包含n个范围在[x, y]之间的随机整数 |
| random.rand(*dn) | dn代表dimension,调用的时候不需要传入tuple,只需要传入每一个维度的长度,维数之间用逗号分隔。eg. rand(2, 3, 4),返回来一个三维数组,长度分别是2,3,4 |
| random.random_sample(shape) | 创建一个形状为shape,元素为[0, 1.0)之间的数,若参数是一个单独的数,则创建一个n个数的一维数组 |
| zeros(shape) | 同上,只不过元素为0.0 |
| ones(shape) | 同上,只不过元素为1.0 |
代码展示
import numpy as np
l = [1, 2,4, 5]
martix = [
[2, 3,4, 5],
[4, 5, 6, 7]
]
narray = np.array(l)
npmartix = np.array(martix)
print(narray) # [1 2 4 5]
print(npmartix)
# [[2 3 4 5]
# [4 5 6 7]]
nprange = np.arange(10, 21, 2)
print(nprange)
# [10 12 14 16 18 20]
line = np.linspace(0, 10, 6)
print(line)
# [ 0. 2. 4. 6. 8. 10.]
rand = np.random.randint(10, 20, 10)
print(rand)
# [19 18 12 19 14 13 18 11 13 10]
zeros = np.zeros((2, 3))
print(zeros)
# [[0. 0. 0.]
# [0. 0. 0.]]
ones = np.ones((2, 3))
print(ones)
# [[1. 1. 1.]
# [1. 1. 1.]]
print(np.random.random_sample((2, 3)))
# [[0.40496204 0.68582804 0.23432677]
# [0.44138117 0.85704346 0.24691917]]
print(np.random.rand(2,2,2))
# [[[0.14219542 0.40372185]
# [0.85191046 0.91525198]]
# [[0.93477104 0.74098469]
# [0.19136794 0.40864522]]]
2.numpy数组常用属性和方法
| 属性 | 含义 |
|---|---|
| dtype | 数组元素的类型 |
| ndim | 数组的维度 |
| shape | 数组的形状,即每一维的长度 |
| size | 数组元素个数 |
代码展示
import numpy as np
array = np.array([1,2,3,4,5,6])
print(array) # [1 2 3 4 5 6]
print(array.dtype) # int32
print(array.ndim) # 1
print(array.size) # 6
print(array.shape) # (6,)
newarray = array.reshape((2,3))
print(array) # [1 2 3 4 5 6],说明reshape并不会改变原先的数组
print(newarray)
# [[1 2 3]
# [4 5 6]]
print(newarray.shape) # (2, 3)
print(newarray.ndim) # 2
| 方法 | 功能 |
|---|---|
| reshape | 改变数组的形状 |
| flatten | 转换为一维数组 |
| argwhere | 查找元素 |
| tolist | 转换为list |
| min | 求最小元素 |
| max | 求最大元素 |
| sum | 求和 |
| mean | 求均值 |
代码展示
import numpy as np
newarray = np.array(
[[1, 2 ,3],
[4, 5, 6]]
)
# reshape((-1, 2)) 中的 -1 意味着系统自己计算有多少行
print(newArray.reshape((-1, 2)))
# [[1 2]
# [3 4]
# [5 6]]
pos = np.argwhere(newarray == 3)
print(pos)
# [[0 2]]
lst = newarray.tolist()
print(lst)
# [[1, 2, 3], [4, 5, 6]]
print(newarray.min()) # 1
print(newarray.max()) # 6
flat = newarray.flatten()
print(flat)
# [1, 2, 3, 4, 5, 6]
print(newArray.mean()) # 3.5
print(newArray.sum()) # 21
3. numpy添加元素
| 函数 | 功能 |
|---|---|
| append(x, y) | 若y是数组,列表或者元组,就将y的元素添加进数组x |
| concatenate((...), axis) | 拼接多个数组或列表 |
numpy数组一旦生成,元素就不能增加或者删除,上面的函数都是返回新的数组
代码展示
import numpy as np
newarray = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
addarray = np.random.randint(10,100,4)
print(np.append(newarray, addarray))
# [ 1 2 3 4 2 3 4 5 3 4 5 6 71 92 95 83]
print(np.append(newarray,10.0))
# [ 1. 2. 3. 4. 2. 3. 4. 5. 3. 4. 5. 6. 10.]
addarray1= np.array(
[[1,2],
[2,3],
[2,3]]
)
print(np.concatenate((newarray,newarray, addarray1),axis=1))
# [[1 2 3 4 1 2 3 4 1 2]
# [2 3 4 5 2 3 4 5 2 3]
# [3 4 5 6 3 4 5 6 2 3]]
4. numpy删除数据元素
| 函数 | 功能 |
|---|---|
| delete | 删除元素得到新数组,注意只能删除其中的一个元素,一维数组可以删除其中的一个数,而二维数组只能删除其中的行或者列 |
import numpy as np
newarray = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
print(np.delete(newarray,[0,1], axis=1)) # 删除第一列和第二列
# [[3 4]
# [4 5]
# [5 6]]
5. numpy查找元素
| 方法 | 功能 |
|---|---|
| argwhere | 查找元素所在位置,位置以ndarray类型返回 |
| in | 判断某个元素是否在数组里面 |
| array[condition] | 根据condition来抽取array中符合condition的元素组成一个一维数组 |
代码展示
import numpy as np
array = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
# argwhere查找, 返回一个ndarray,包含了查找到的位置
pos = np.argwhere(array==3)
print(pos)
# [[0 2]
# [1 1]
# [2 0]]
print(type(pos))
# <class 'numpy.ndarray'>
# in操作
print(2 in array) # True
print(10 in array) # False
# 抽取其中的某些元素组成一维数组,注意这是切片操作,实际上得到的是array的视图
b = array[array > 1]
print(b)
# [2 3 4 2 3 4 5 3 4 5 6]
6. numpy中修改元素
可以直接根据下标来修改元素
import numpy as np
array = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
array[0][1] = 10
print(array)
7. numpy中的数学运算
数组的运算有三种情况
- 数组和单个数进行运算,则数组中每个元素都与这个数进行相同的运算
- 数组和形状相同的数组进行运算,对应元素进行运算
- 数组和形状不同的数组进行运算,会自动用广播规则
代码展示
import numpy as np
array = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
# 和单个数进行运算
print(array + 10)
print(array - 10)
print(array * 10)
print(array / 10)
# 和形状相同的数组进行运算
print(array + array)
print(array * array)
print(array - array)
print(array / array)
# 运用了广播规则
ten = np.array([10, 10, 10, 10])
print(np.add(array, ten))
# [[11 12 13 14]
# [12 13 14 15]
# [13 14 15 16]]
8. numpy数组切片
语法:
- array是一维数组,
array[1: 3], 左闭右开区间 - array是一维数组,
array[1:7:2],左闭右开,每隔两个元素取一个 - array是二维数 组,
array[1:3, 1:3], 左闭右开区间
代码展示
import numpy as np
array = np.array(
[[1,2,3,4],
[2,3,4,5],
[3,4, 5,6]]
)
b = array[0:2, 0:2]
print(b)
# [[1 2]
# [2 3]]
# 没有说明列范围时,默认切割所有列
c = array[1: 3]
print(c)
# [[2 3 4 5]
# [3 4 5 6]]
# 切片只是视图
b[0][0] = 100
print(b)
# [[100 2]
# [ 2 3]]
print(array)
# [[100 2 3 4]
# [ 2 3 4 5]
# [ 3 4 5 6]]
注意: numpy中数组切片就是视图
9. numpy输出控制
import numpy as np
# 设置浮点数精度,precision
np.set_printoption(precision=2)