目录
学习目标;
一、认识和创建数组
定义:
ndarray对象属性
数组创建
array()函数
zerosz()和ones()函数
empty()函数
arange()函数
二、ndarray对象的数据类型
ndarray.dtype
常用数据类型
特征码
astype()方法
三、运算,索引,切片
运算
索引,切片
花式索引
布尔型索引
四、通用函数、数据处理
常见的一元通用函数
常见的二元通用函数
数据处理
where()函数
sort()方法:元素进行排序
all()函数
unique()函数
in1d()函数
有关集合的函数
五、模块
1、线性代数
numpy.linalg模块
dot()方法(用于矩阵乘法)
2、随机数(random模块)
rand()函数
seed( )函数
学习目标;
创建数组,数组运算,索引与切片利用数组进行数据处理数据类型,线性代数模块,随机数模块转置和轴对称,通用函数
一、认识和创建数组
定义:
NumPy中最重要的一个特点就是其N维数组对象,该对象可以执行一些科学计算。
ndarray对象属性
属性 具体说明 ndarray.ndim 维度个数,数组的个数 ndarray.shape 数组维度。是一个整数的元组,表示每个维度上数组的大小 ndarray.size 数组元素的总个数,等于shape属性中元组元素的乘积 ndarray.dtype 描述数组中ing元素类型的对象,可以使用标准的Python来创建,野了使用NumPy特有的数据类型指定 ndarray.itemsize 数组中平每个元素的字节大小
数组创建 array()函数
一维数组 data1 = np.array([1, 2, 3]) 二维数组 data2 = np.array([[1, 2, 3], [4, 5, 6]])
zerosz()和ones()函数
zeros()函数创建元素值都是0的数组:np.zeros((3, 4))通过ones()函数创建元素值都为1的数组:np.ones((3, 4))
empty()函数
定义:创建一个新的数组,该数组只分配了内存空间,它里面填充的元素都是随机的
np.empty((5, 2))
arange()函数
定义:创建一个等差数组,arange()函数返回的结果是数组,不是列表
np.arange(1, 20, 5)
注:有些数组元素的后面会跟着一个小数点,而有些元素后面没有,比如1和1.,产生这种现象,主要是因为元素的数据类型不同所导致的。
二、ndarray对象的数据类型
ndarray.dtype
定义:创建一个表示数据类型的对象,如果希望获取数据类型的名称,则需要访问name属性进行获取。
data_one = np.array([[1, 2, 3], [4, 5, 6]])
data_one.dtype.name
常用数据类型
特征码
特征码 含义 b 布尔型
u 无符号整型 c 复数类型 S,a 字节字符串 V 原始数据 i 有符号整形 f 浮点型 O Python对象 U unicode 字符串
astype()方法
定义:ndarray对象的数据类型可以通过astype()方法进行转换。
data = np.array([[1, 2, 3], [4, 5, 6]])
data.dtype
# 数据类型转换为float64
float_data = data.astype(np.float64)
float_data.dtype
三、运算,索引,切片
运算
矢量化运算:形状相同的数组广播机制:形状不同的数组数组与标量运算:标量
标量运算会产生一个与数组具有相同行和列的新矩阵,其原始矩阵的每个元素都被相加、相减、相乘或者相除。
索引,切片
arr = np.arange(8)
# 获取索引为5的元素
arr[5]
# arr[5]
# 获取索引为3~5的元素,但不包括5
arr[3:5]
# array([3, 4])
二维数组:
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取索引为1的元素
arr2d[1]
# array([4, 5, 6])
二维数组的单个元素
# 获取位于第0行第1列的元素
arr2d[0, 1]
# 2
多维数组的切片是沿着行或列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用。
# 使用一个切片
arr2d[:2]
# array([[1, 2, 3],
[4, 5, 6]])
# 使用两个切片
arr2d[0:2, 0:2]
# array([[1, 2],
[4, 5]])
# 切片与整数索引混合使用
arr2d[1, :2]
#array([[1, 2],
[4, 5]])
花式索引
定义:用整数数组或列表进行索引,然后再将数组或列表中的每个元素作为下标进行取值。
#创建一个二维数组
demo_arr = np.empty((4, 4))
for i in range(4):
demo_arr[i] = np.arange(i, i + 4)
# 获取索引为[0,2]的元素
demo_arr[[0, 2]]
# 获取索引为(1,1)和(3,2)的元素
demo_arr[[1, 3], [1, 2]]
布尔型索引
定义:将一个布尔数组作为数组索引,返回的数据是布尔数组中True对应位置的值。
array([False, False, True, False])
四、通用函数、数据处理
常见的一元通用函数
常见的二元通用函数
数据处理 where()函数
arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)
# array([1, 6, 7])
数组的统计汇总
sort()方法:元素进行排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
arr.sort()
# array([[2, 6, 7],
# [2, 3, 6],
# [2, 3, 4]])
# 对任何一个轴上的元素进行排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
# 沿着编号为0的轴对元素排序
arr.sort(0)
# array([[3, 2, 2],
# [4, 3, 2],
# [6, 6, 7]])
all()函数
定义:判断整个数组中的元素的值是否全部满足条件。
arr = np.array([[1, -2, -7],[-3, 6, 2], [-4, 3, 2]])
# arr的所有元素是否都大于0
np.all(arr > 0)
any()函数
定义:用于判断整个数组中的元素至少有一个满足条件
unique()函数
定义:找出数组中的唯一值,并返回排序后的结果
in1d()函数
判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组。
arr = np.array([12, 11, 34, 23, 12, 8, 11])
np.in1d(arr, [11, 12])
# array([ True, True, False, False, True, False, True])
有关集合的函数
五、模块
1、线性代数
numpy.linalg模块
矩阵分解运算:
通过“*”对两个数组相乘的话,得到的是一个元素级的积,而不是一个矩阵点积。
dot()方法(用于矩阵乘法)
arr_x = np.array([[1, 2, 3], [4, 5, 6]])
arr_y = np.array([[1, 2], [3, 4], [5, 6]])
# 等价于np.dot(arr_x, arr_y)
arr_x.dot(arr_y)
# array([[22, 28], [49, 64]])
2、随机数(random模块)
rand()函数
定义:随机生成N维浮点数组。
# 随机生成一个二维数组
np.random.rand(3, 3)
生成服从多种概率分布随机数的其它函数:
seed( )函数
定义:可以保证生成的随机数具有可预测性,也就是说产生的随机数相同
numpy.random.seed(seed=None)
#seed参数,用于指定随机数生成时所用算法开始的整数值
注意:当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。 当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。
定义:
NumPy中最重要的一个特点就是其N维数组对象,该对象可以执行一些科学计算。
ndarray对象属性
| 属性 | 具体说明 |
|---|---|
| ndarray.ndim | 维度个数,数组的个数 |
| ndarray.shape | 数组维度。是一个整数的元组,表示每个维度上数组的大小 |
| ndarray.size | 数组元素的总个数,等于shape属性中元组元素的乘积 |
| ndarray.dtype | 描述数组中ing元素类型的对象,可以使用标准的Python来创建,野了使用NumPy特有的数据类型指定 |
| ndarray.itemsize | 数组中平每个元素的字节大小 |
数组创建 array()函数
一维数组 data1 = np.array([1, 2, 3]) 二维数组 data2 = np.array([[1, 2, 3], [4, 5, 6]])
- 一维数组 data1 = np.array([1, 2, 3]) 二维数组 data2 = np.array([[1, 2, 3], [4, 5, 6]])
zerosz()和ones()函数
zeros()函数创建元素值都是0的数组:np.zeros((3, 4))通过ones()函数创建元素值都为1的数组:np.ones((3, 4))
empty()函数
定义:创建一个新的数组,该数组只分配了内存空间,它里面填充的元素都是随机的
np.empty((5, 2))
arange()函数
定义:创建一个等差数组,arange()函数返回的结果是数组,不是列表
np.arange(1, 20, 5)
注:有些数组元素的后面会跟着一个小数点,而有些元素后面没有,比如1和1.,产生这种现象,主要是因为元素的数据类型不同所导致的。
二、ndarray对象的数据类型
ndarray.dtype
定义:创建一个表示数据类型的对象,如果希望获取数据类型的名称,则需要访问name属性进行获取。
data_one = np.array([[1, 2, 3], [4, 5, 6]]) data_one.dtype.name
常用数据类型
特征码
| 特征码 | 含义 |
|---|---|
| b | 布尔型 |
| u | 无符号整型 |
| c | 复数类型 |
| S,a | 字节字符串 |
| V | 原始数据 |
| i | 有符号整形 |
| f | 浮点型 |
| O | Python对象 |
| U | unicode 字符串 |
astype()方法
定义:ndarray对象的数据类型可以通过astype()方法进行转换。
data = np.array([[1, 2, 3], [4, 5, 6]]) data.dtype # 数据类型转换为float64 float_data = data.astype(np.float64) float_data.dtype
三、运算,索引,切片
运算
矢量化运算:形状相同的数组广播机制:形状不同的数组数组与标量运算:标量
标量运算会产生一个与数组具有相同行和列的新矩阵,其原始矩阵的每个元素都被相加、相减、相乘或者相除。
索引,切片
arr = np.arange(8)
# 获取索引为5的元素
arr[5]
# arr[5]
# 获取索引为3~5的元素,但不包括5
arr[3:5]
# array([3, 4])
二维数组:
arr2d = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
# 获取索引为1的元素
arr2d[1]
# array([4, 5, 6])
二维数组的单个元素
# 获取位于第0行第1列的元素 arr2d[0, 1] # 2
多维数组的切片是沿着行或列的方向选取元素的,我们可以传入一个切片,也可以传入多个切片,还可以将切片与整数索引混合使用。
# 使用一个切片
arr2d[:2]
# array([[1, 2, 3],
[4, 5, 6]])
# 使用两个切片
arr2d[0:2, 0:2]
# array([[1, 2],
[4, 5]])
# 切片与整数索引混合使用
arr2d[1, :2]
#array([[1, 2],
[4, 5]])
花式索引
定义:用整数数组或列表进行索引,然后再将数组或列表中的每个元素作为下标进行取值。
#创建一个二维数组
demo_arr = np.empty((4, 4))
for i in range(4):
demo_arr[i] = np.arange(i, i + 4)
# 获取索引为[0,2]的元素
demo_arr[[0, 2]]
# 获取索引为(1,1)和(3,2)的元素
demo_arr[[1, 3], [1, 2]]
布尔型索引
定义:将一个布尔数组作为数组索引,返回的数据是布尔数组中True对应位置的值。
array([False, False, True, False])
四、通用函数、数据处理
常见的一元通用函数
常见的二元通用函数
数据处理 where()函数
arr_x = np.array([1, 5, 7])
arr_y = np.array([2, 6, 8])
arr_con = np.array([True, False, True])
result = np.where(arr_con, arr_x, arr_y)
# array([1, 6, 7])
arr_x = np.array([1, 5, 7]) arr_y = np.array([2, 6, 8]) arr_con = np.array([True, False, True]) result = np.where(arr_con, arr_x, arr_y) # array([1, 6, 7])
数组的统计汇总
sort()方法:元素进行排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
arr.sort()
# array([[2, 6, 7],
# [2, 3, 6],
# [2, 3, 4]])
# 对任何一个轴上的元素进行排序
arr = np.array([[6, 2, 7],
[3, 6, 2],
[4, 3, 2]])
# 沿着编号为0的轴对元素排序
arr.sort(0)
# array([[3, 2, 2],
# [4, 3, 2],
# [6, 6, 7]])
all()函数
定义:判断整个数组中的元素的值是否全部满足条件。
arr = np.array([[1, -2, -7],[-3, 6, 2], [-4, 3, 2]])
# arr的所有元素是否都大于0
np.all(arr > 0)
any()函数
定义:用于判断整个数组中的元素至少有一个满足条件
unique()函数
定义:找出数组中的唯一值,并返回排序后的结果
in1d()函数
判断数组中的元素是否在另一个数组中存在,该函数返回的是一个布尔型的数组。
arr = np.array([12, 11, 34, 23, 12, 8, 11])
np.in1d(arr, [11, 12])
# array([ True, True, False, False, True, False, True])
有关集合的函数
五、模块
1、线性代数
numpy.linalg模块
numpy.linalg模块
矩阵分解运算:
通过“*”对两个数组相乘的话,得到的是一个元素级的积,而不是一个矩阵点积。
dot()方法(用于矩阵乘法)
arr_x = np.array([[1, 2, 3], [4, 5, 6]])
arr_y = np.array([[1, 2], [3, 4], [5, 6]])
# 等价于np.dot(arr_x, arr_y)
arr_x.dot(arr_y)
# array([[22, 28], [49, 64]])
2、随机数(random模块)
rand()函数
定义:随机生成N维浮点数组。
# 随机生成一个二维数组
np.random.rand(3, 3)
生成服从多种概率分布随机数的其它函数:
seed( )函数
定义:可以保证生成的随机数具有可预测性,也就是说产生的随机数相同
numpy.random.seed(seed=None)
#seed参数,用于指定随机数生成时所用算法开始的整数值
注意:当调用seed()函数时,如果传递给seed参数的值相同,则每次生成的随机数都是一样的。 当传递的参数值不同或者不传递参数时,则seed()函数的作用跟rand()函数相同,即多次生成随机数且每次生成的随机数都不同。



