1、概述
Numpy是高性能科学计算和数据分析的基础包,它的部分功能如下:
1)ndarray,一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。
2)对整组数据进行快速运算的标准数学函数
3)用于读写磁盘数据的工具以及用于操作内存映射文件的工具。
2、ndarray的创建
这一节,我们主要关注ndarray数组的创建,我们主要有以下几种方式:
数组转换
创建数组的最简单的方法就是使用array函数,将Python下的list转换为ndarray。
#通过数组创建一个ndarray data1 = [6,7.5,8,0,1] arr1 = np.array(data1) arr1
输出为:
xarray([ 6. , 7.5, 8. , 0. , 1. ])
也可以创建二维数组
#通过数组创建一个二维的ndarray data2 = [[1,2,3,4],[5,6,7,8]] arr2 = np.array(data2) arr2
输出为:
array([[1, 2, 3, 4], [5, 6, 7, 8]])
数组生成
除了通过数组转换而来之外,我们可以利用np中的一些内置函数来创建数组,比如我们创建全0的数组,也可以创建全1数组,或者等差数列数组:
##创建全0数组 np.zeros(10)
输出为:
array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])
np.ones(3)
输出为:
array([ 1., 1., 1.])
#创建等差数组 np.arange(1,15,2)
输出为:
array([ 1, 3, 5, 7, 9, 11, 13])
我们已可以生成一些随机数数组,比如下面的方式可以生成均值为2,标准差为3的正态分布数组:
#创建正态分布随机数数组 samples = np.random.normal(2,3,size=(4,4)) samples
输出为:
array([[ 3.22094168, 2.83535518, 6.08625335, 1.28604611], [ 1.28741059, -2.76328197, 3.04233101, 2.01606861], [-4.01262367, -1.12355259, 0.59416967, 4.07616321], [-1.9936047 , 0.32834631, 5.64805711, 4.19171525]])
如果想生成标准正态分布随机数组,可以直接使用randn函数:
#创建正态分布数组 samples1 = np.random.randn(4,4) samples
输出为:
array([[ 2.61680992, 1.72497013, 2.97738852, 0.78316473], [ 3.41222285, 3.50582899, 2.5927854 , 5.09012117], [ 0.55369215, 6.66957866, 4.37837409, 5.25935515], [-0.82391358, -2.22526414, 0.2730311 , 1.69091322]])
我们也可以使用randint生成随机整数数组,前两个参数决定了数组中数据的值的上下限:
#创建随机整数数组 draws = np.random.randint(0,10,size=(3,4)) draws
输出为:
array([[2, 2, 4, 5], [7, 5, 8, 5], [9, 0, 6, 1]])
文件读取
numpy还可以读取txt或者csv文件来创建ndarray,也可以读取从别的代码中保存的np文件,我们可以使用save方法保存ndarray到一个npy文件,也可以使用savez将多个array保存到一个.npz文件中:
x = np.array([1,2,4,5]) y = np.array([3,4,5]) #save方法可以存取一个ndarray np.save("x_arr",x) #如果要存取多个数组,要是用savez方法 np.savez("some_array.npz",xarr = x,yarr=y)
保存文件之后,我们可以通过load方法来读取存储的数组,如果是.npz文件的话,读取之后相当于形成了一个k-v类型的变量,通过保存时定义的key来获取相应的array。
np.load('x_arr.npy') #array([1, 2, 4, 5]) arch = np.load("some_array.npz") arch['yarr'] #array([3, 4, 5])
np.loadtxt 和 np.savetxt可以用来存取txt或csv文件:
arr = np.loadtxt('array_ex.txt',delimiter=',',dtype=np.int32) arr #array([[1, 2, 3, 4, 5], # [2, 3, 4, 5, 6], # [4, 5, 7, 8, 9]], dtype=int32) np.savetxt("array_ex1.txt",arr)
3、ndarray的数据类型
ndarray的数据类型有int8、int16、int32、int64、float16、float32、float64等等,我们可以在创建数组时显式指定数据类型:
#指定array的数据类型 arr1 = np.array([1,2,3],dtype=np.int32) arr2 = np.array([1,2,3],dtype=np.float32)
我们可以使用数组的dtype属性对数组的数据类型进行查看:
#查看array的数据类型 arr2.dtype ### dtype('float32')
我们可以使用astype将一个数组的数据类型进行转换,这样会返回一个新的数组,对原数组不会产生影响
#数据类型进行转换,会产生一个新的array,原array不产生影响 arr1.astype(np.float32) arr1.dtype # dtype('int32') float_arr = arr1.astype(np.float32) float_arr.dtype # dtype('float32')