NumPy数值计算基础
- NumPy是在1995年诞生的Python库Numeric的基础上建立起来的,但真正促使NumPy的发行的是Python的SciPy库。但SciPy中并没有合适的类似于Numeric中的对于基础数据对象处理的功能。于是,SciPy的开发者将SciPy中的一部分和Numeric的设计思想结合,在2005年发行了NumPy。
- NumPy是Python的一种开源的数值计算扩展库。它包含很多功能,如创建n维数组(矩阵)、对数组进行函数运算、数值积分等。 NumPy的诞生弥补了这些缺陷,它提供了两种基本的对象:
- ndarray:是储存单一数据类型的多维数组。
- ufunc:是一种能够对数组进行处理的函数。
- NumPy常用的导入格式:import numpy as np
一、NumPy多维数组
1 创建数组对象
通常来说,ndarray是一个通用的同构数据容器,即其中的所有元素都需要相同的类型。利用array函数可创建ndarray数组。
(1)利用array函数创建数组对象
array函数的格式:np.array(object, dtype,ndmin)
array函数的主要参数及说明:
import numpy as np
data1 = [1,3,5,7] #列表
w1 = np.array(data1)
print('w1:',w1)
data2 = (2,4,6,8) #元组
w2 = np.array(data2)
print('w2:',w2)
data3 = [[1,2,3,4],[5,6,7,8]] #多维数组
w3 = np.array(data3)
print('w3:',w3)
(2)专门创建数组的函数
- arange函数:创建等差一维数组
- 格式:np.arange([start, ]stop, [step, ]dtype)
例:`
warray = np.arange(10)
print(warray)
warray = np.arange(0,1,0.2)
print(warray)`
- logspace函数:创建等比一维数组
- 格式:np.logspace(start, stop, num, endpoint=True,base=10.0, dtype=None))
logspace的参数中,start, stop代表的是10的幂,默认基数base为10,第三个参数元素个数。
warray = np.logspace(0,1,5)#生成1-10间的5个元素的等比数列
print(warray)
- zeros函数:创建指定长度或形状的全0数组
- 格式:np.zeros(shape, dtype=float, order=‘C’)
- ones函数:创建指定长度或形状的全1数组
- 格式:np. ones(shape, dtype=None, order=‘C’)
- diag函数:创建一个对角阵。
- 格式:np.diag(v, k=0)
2 ndarray对象属性和数据转换
ndarray对象属性及其说明:
例:
warray = np.array([[1,2,3],[4,5,6]])
print('秩为:',warray.ndim)
print('形状为:',warray.shape)
print('元素个数为:',warray.size)
设置数组的shape属性。
warray.shape = 3,2
print(warray)
数组的类型转换。
arr1 = np.arange(6)
print(arr1.dtype)
arr2 = arr1.astype(np.float64)
print(arr2.dtype)
3 生成随机数
在NumPy.random模块中,提供了多种随机数的生成函数。如randint函数生成指定范围的随机整数来构成指定形状的数组。
用法:
np.random.randint(low, high = None, size = None)
arr = np.random.randint(100,200,size = (2,4))
print(arr)
random模块的常用随机数生成函数
4 数组变换
(1)数组重塑
与reshape相反的方法是数据散开(ravel)或数据扁平(flatten)。
arr1 = np.arange(12).reshape(3,4)
print("arr1:",arr1)
arr2 = arr1.ravel()
print("arr2:",arr2)
数据重塑不会改变原来的数组。
(2)数组合并
- hstack函数:实现横向合并
- vstack函数:实现纵向组合是利用vstack将数组纵向合并;
- concatenate函数:可以实现数组的横向或纵向合并,参数axis=1时进行横向合并,axis=0时进行纵向合并。
arr1 = np.arange(6