Numpy 入门
Numpy安装
首先更改pip的国内镜像源,因为国外的源下载东西他太慢了
Windows环境下:
- 在user用户目录下创建一个名为pip的文件夹
- 在文件夹内创建一个名为pip的文本文件(创建完成后将“.txt”改为".ini")
- 将以下代码拷贝到文件里
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = https://pypi.tuna.tsinghua.edu.cn
//trusted-host 此参数是为了避免麻烦,否则使用的时候可能会提示不受信任
修改完成!!!
在cmd界面执行以下命令下载numpy库:
pip install numpy
导入Numpy
import numpy as np
接下来就可以用np去操作数组了。
Numpy数组创建
Numpy用于处理数组。Numpy中的数组对象称为ndarray
创建ndarray
arr = np.array([1,2,3,4,5,6])
print(arr)
print(type(arr)) //查看arr的类型
数组中的维度
0-D数组
0-D数组就是数组中的元素,数组中的每个值都是一个0-D数组。
arr = np.array(61)
1-D数组
arr = np.array([1,2,3,4,5,6])
2-D数组
arr = np.array([[1,2,3],[4,5,6]])
3-D数组
arr = np.array([[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]])
获取数组的维度
a = np.array(42)
b = np.array([1, 2, 3, 4, 5])
c = np.array([[1, 2, 3], [4, 5, 6]])
d = np.array([[[1, 2, 3], [4, 5, 6]], [[1, 2, 3], [4, 5, 6]]])
print(a.ndim)
print(b.ndim)
print(c.ndim)
print(d.ndim)
更高维度的数组
arr = np.array([1,2,3,4],ndim=5)
// [[[[[1,2,3,4]]]]]
数组的索引
访问一维数组元素
arr = np.array([1,2,3,4])
print(arr[1])
访问二维数组元素
arr = np.array([[1,2,3],[4,5,6]])
print(arr[1,2]) //6
访问三维数组元素
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
print(arr[1,1,2]) //12
负索引
arr = np.array([[1,2,3],[4,5,6]])
print(arr(1,-1)) //6
数组切割
指定所以切割
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5]) //2,3,4,5
指定开头
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[4:]) //5,6,7
指定结尾
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[:4]) //1,2,3,4
负索引切割
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[-3:-1]) //5,6
step
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5:2]) //2,4
切割2-D数组
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[1, 1:4]) //7,8,9
从两个元素中返回索引2
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 2]) //3,8
从两个元素中切割索引1-4的元素
arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]])
print(arr[0:2, 1:4]) [[2,3,4],[7,8,9]]
数组的形状
获取数组的形状
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
print(arr.shape) // (2,4)
数组重塑
从1-D重塑为2-D
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(4, 3)
//[[1,2,3]
[4,5,6]
[7,8,9]
[10,11,12]]
从1-D重塑为3-D
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
newarr = arr.reshape(2,3,2)
//[[[1,2],
[3,4],
[5,6]]
[[7,8]
[9,10]
[11,12]]]
展平数组
arr = np.array([[1, 2, 3], [4, 5, 6]])
newarr = arr.reshape(-1) //[1,2,3,4,5,6]
数组迭代
迭代一维数组
arr = np.array([1, 2, 3])
for x in arr:
print(x)
//1
2
3
迭代二维数组
arr = np.array([[1, 2, 3],[4,5,6]])
for x in arr:
print(x)
//[1,2,3] [4,5,6]
//迭代每个元素
for x in arr:
for y in x:
print(y)
迭代三维数组
arr = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
for x in arr:
print(x)
//[[1,2,3],[4,5,6]]
[[7,8,9],[10,11,12]]
//迭代到每个元素
for x in arr:
for y in x:
for z in y:
print(z)
nditer()迭代数组
//迭代每个元素
arr = np.array([[[1, 2], [3, 4]], [[5, 6], [7, 8]]])
for x in np.nditer(arr):
print(x)
//1,2,3,4,5,6,7,8
以不同的步长迭代
arr = np.array([[1, 2, 3, 4], [5, 6, 7, 8]])
for x in np.nditer(arr[:, ::2]):
print(x)
//1,3,5,7
数组连接
连接两个数组
arr1 = np.array([1, 2, 3])
arr2 = np.array([4, 5, 6])
arr = np.concatenate((arr1, arr2))
print(arr)
沿行连接两个2-D数组
arr1 = np.array([[1, 2], [3, 4]])
arr2 = np.array([[5, 6], [7, 8]])
arr = np.concatenate((arr1, arr2), axis=1)
print(arr)
//[[1,2,5,6][3,4,7.8]]
数组拆分
将一维数组拆分为3部分
arr = np.array([1, 2, 3, 4, 5, 6])
newarr = np.array_split(arr, 3)
print(newarr)
//[array([1, 2]), array([3, 4]), array([5, 6])]
拆分二维数组
arr = np.array([[1, 2], [3, 4], [5, 6], [7, 8], [9, 10], [11, 12]])
newarr = np.array_split(arr, 3)
print(newarr)
//[array([[1, 2],
[3, 4]]), array([[5, 6],
[7, 8]]), array([[ 9, 10],
[11, 12]])]
数组搜索
where()
arr = np.array([1, 2, 3, 4, 5, 4, 4])
x = np.where(arr == 4)
print(x) //array([3,5,6])
arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
x = np.where(arr%2 == 0)
print(x)
//array([1, 3, 5, 7]
搜索排序
首先数组内的元素应该保证有序,不然该方法无效!!!!查找应在其中插入值 7 的索引:
arr = np.array([6, 7, 8, 9])
x = np.searchsorted(arr, 7)
print(x) //1
//从右侧开始
arr = np.array([6, 7, 8, 9])
x = np.searchsorted(arr, 7, side='right')
print(x) //2
数组排序
sort()
arr = np.array([3, 2, 0, 1])
print(np.sort(arr))
//[0,1,2,3]
对2-D数组排序
arr = np.array([[3, 2, 4], [5, 0, 1]])
print(np.sort(arr))
//[[2 3 4]
[0 1 5]]
//仅保证每个维度内的数据有序
数组过滤
布尔值过滤
在 NumPy 中,我们使用布尔索引列表来过滤数组。布尔索引列表是与数组中的索引相对应的布尔值列表。如果索引处的值为 True,则该元素包含在过滤后的数组中;如果索引处的值为 False,则该元素将从过滤后的数组中排除。
arr = np.array([61, 62, 63, 64, 65])
x = [True, False, True, False, True]
newarr = arr[x]
print(newarr)
创建过滤器数组
arr = np.array([61, 62, 63, 64, 65])
//创建一个空列表
filter_arr = []
//遍历 arr 中的每个元素
for element in arr:
//如果元素大于 62,则将值设置为 True,否则为 False:
if element > 62:
filter_arr.append(True)
else:
filter_arr.append(False)
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
//[False, False, True, True, True]
[63 64 65]
直接过滤
arr = np.array([61, 62, 63, 64, 65])
filter_arr = arr > 62
newarr = arr[filter_arr]
print(filter_arr)
print(newarr)
//[False False True True True]
[63 64 65]
numpy随机数
生成随机数
from numpy import random
x = random.randint(100)
print(x)
生成随机浮点数
x = random.rand()
print(x)
生成有3行,每行5个元素的随机二维数组
x = random.randint(100,size(3,5))
print(x)