提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
前言
Numpy自学笔记,记录也是方便自己以后看。
一、Numpy是什么?
Numpy,是目前python数值计算中最为重要的基础包。我们可以认为,numpy本身并不提供建模和科学函数,但是却提供了数组和数组计算,这些功能能够帮助我们更加高效的使用基于数组计算的工具,如pandas。
二、生成ndarray
Numpy最核心的特征之一就是ndarray——多维数组对象。
1.引入库
标准导入方式:
import numpy as np
2.使用numpy随机生成ndarray
①随机生成一个行列式
data = np.random.randn(2,3) #生成一个2行3列的行列式
②随机生成一个正态分布
data = np.random.normal(4,1,100) # 随机生成的是一个均值为4,标准差为1的100个元素的数组
③随机生成一列数
data = np.random.uniform(0,5,100) #随机生成0~5之间的100个元素
3.查看数组的形状、数据类型与重塑:
①形状: data.shape
data = np.array([[1,2,3],[4,5,6]])
print(data.shape)
# (2,3)
②数据类型: data.dtype
data = np.array([[1,2,3],[4,5,6]])
print(data.dtype)
# int32
③数组重塑:
data = np.array([[1,2,3],[4,5,6]])
data = data.astype(np.float64)
print(data.dtype)
#float64
在这里介绍常见的numpy的数据类型:
f:浮点型
i:整数型
b:布尔值 (存储为True 或 False)
c:浮点数的复数
O:对象
S:字符串
u:修正的unicode
4.用array 生成数组
array函数接受任何序列型对象,最后转为数组
例如:
同等长度的列表,最后会转为数组:
data = [1,2,3,4,5]
arr = np.array(data)
# arr([1,2,3,4,5])
包含列表的列表,最后会转为2维数组:
data=[[1,2,3],[4,5,6]]
arr = np.array(data)
#arr([[1,2,3],
[4,5,6]])
在这里介绍数组的维:
①0-D 数组:是数组中的元素,数组中的每个值都是一个 0-D 数组。
arr = np.array(61)
print(arr)
# 61
②1-D数组:元素为0-D数组的数组
# 创建包含值 1、2、3、4、5、6 的 1-D 数组:
arr = np.array([1, 2, 3, 4, 5, 6])
print(arr)
# [1, 2, 3, 4, 5, 6]
③2-D数组:元素为1-D数组的数组,通常用于表示矩阵或者二阶张量
#创建包含值 1、2、3 和 4、5、6 两个数组的 2-D 数组:
arr = np.array([[1, 2, 3], [4, 5, 6]])
print(arr)
# [[1 2 3]
[4 5 6]]
④3-D数组:其元素为 2-D 数组的数组
#用两个 2-D 数组创建一个 3-D 数组,这两个数组均包含值 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]]]
5.其他生成数组的函数
#zeros可以一次性创造全0数组
np.zeros(5) # array([0,0,0,0,0])
#ones可以一次性创造全1数组
np.ones(5) #array([1,1,1,1,1])
#empty 生成没有初始化数值的数组
np.empty(2,3,2) # 2行3列的2维初始化数组
三、索引
数组索引等同于访问数组元素,可以通过引用其索引号来访问数组元素。
NumPy 数组中的索引以 0 开头,这意味着第一个元素的索引为 0,第二个元素的索引为 1,以此类推.
1.一维数组
对一维数组的索引比较简单,与python的列表相似
#从数组中获取第一个元素
import numpy as np
arr = np.array([1, 2, 3, 4])
print(arr[0])
#从数组中获取第二个元素
print(arr[1])
#将数组中获取的第一个元素和第二个元素相加
print(arr[0]+arr[1])
如果传入了一个数值给一个切片,如arr[0:2]=3,数值将会传给整个切片。区别于python的内建列表,数组切片的数组是原始试图,也就是说,一旦给切片传入数值,任何视图的修改都会被反映到原数组上。
arr[0:2] = 3
print(arr)
#得到的结果为[3,3,3,4]
arr1 = arr[0:2]
print(arr1)
#得到的结果为[3,3]
2.二维数组
对于二维数组,每个索引值对应的不再是一个元素,而是一个一维数组。
arr=np.array([[1,2,3,4],[5,6,7,8],[9,1,1,0]])
print(arr[2])
#[9,1,1,0]
若要得到二维数组中的某个元素,可以通过传递一个索引逗号分隔列表去选择单个元素。有以下俩种方法:
arr[2][0]
arr[2,0]
#取数组的第三个一维数组的第一个元素:9
3.三维数组
访问 3-D 数组中的元素,可通过二维数组访问的规则以此类推。
arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
print(arr[0, 1, 2])
#6
四、切片
裁切的意思是将元素从一个给定的索引带到另一个给定的索引。
与python列表的一维对象类似,我们像这样传递切片:[start:end:step].
如果不传递 start,将其视为 0;如果不传递 end,视为该维度内数组的最后一个元素的索引值。
arr=np.array([0,1,2,3,4,5,6,7,8,9])
print(arr[0:4])
# [0,1,2,3]
1.负裁切:
使用减号运算符从末尾开始引用索引
#从末尾开始的索引 3 到末尾开始的索引 1,对数组进行裁切:
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[-3:-1])
#[5,6]
2.STEP
请使用 step 值确定裁切的步长:
索引 1 到索引 5,返回相隔的元素:
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr[1:5:2])
#[2,4,6]
3.二维数组
回想下前面对于二维数组的索引,应用于这里的切片。
arr=np.array([[1,2,3],
[4,5,6],
[7,8,9]])
arr[:2,1:]
#[[2,3],
# [5,6]]
前面讲到二维数组可以通过传递一个索引逗号分隔列表去选择单个元素,让我们依次分析。arr[,]逗号前面选择的一维数组,逗号后面选择的是选择的数组中的元素。arr[:2, ]逗号前面表示选择二维数组中的前两个一维数组,arr[*,1:]逗号后面表示选择一维数组的第二列开始的元素。