1、通用函数:快速的元素级数组函数
ufunc是一种对ndarray中的数据执行元素级运算的函数。
2、利用数组进行数据处理
矢量化:用数组表达式代替循环
eg:在一组值(网格型)上计算函数sqrt(x^2+y^2),np.meshgrid函数接受两个一维数组,并产生两个二维矩阵(对应于两个数组中所有的(x,y)对):
points = np.arange(-5,5,0.01) xs,ys = np.meshgrid(points,points) xs Out[76]: array([[-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], ..., [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99], [-5. , -4.99, -4.98, ..., 4.97, 4.98, 4.99]]) ys Out[77]: array([[-5. , -5. , -5. , ..., -5. , -5. , -5. ], [-4.99, -4.99, -4.99, ..., -4.99, -4.99, -4.99], [-4.98, -4.98, -4.98, ..., -4.98, -4.98, -4.98], ..., [ 4.97, 4.97, 4.97, ..., 4.97, 4.97, 4.97], [ 4.98, 4.98, 4.98, ..., 4.98, 4.98, 4.98], [ 4.99, 4.99, 4.99, ..., 4.99, 4.99, 4.99]])
平方和开根:
z = np.sqrt(xs ** 2 + ys **2 ) z Out[79]: array([[ 7.07106781, 7.06400028, 7.05693985, ..., 7.04988652, 7.05693985, 7.06400028], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], ..., [ 7.04988652, 7.04279774, 7.03571603, ..., 7.0286414 , 7.03571603, 7.04279774], [ 7.05693985, 7.04985815, 7.04278354, ..., 7.03571603, 7.04278354, 7.04985815], [ 7.06400028, 7.05692568, 7.04985815, ..., 7.04279774, 7.04985815, 7.05692568]])
将条件逻辑转换为数组逻辑:
根据cond的值进行选取xarr和yarr的值,当con的值为true时选取xarr。否则选取yarr
xarr = np.array([1.1,1.2,1.3,1.4,1.5]) yarr = np.array([2.1,2.2,2.3,2.4,2.5]) cond = np.array([True,False,True,True,False]) result = np.where(cond,xarr,yarr) result Out[84]: array([ 1.1, 2.2, 1.3, 1.4, 2.5])
3、数学统计方法
arr = np.random.randn(5,4) arr.mean() Out[86]: 0.049325965007176856 np.mean(arr) Out[87]: 0.049325965007176856 arr.sum() Out[88]: 0.98651930014353717
mean和sum这类函数可以接受一个axis函数, 用于计算向上的统计值,最终结果是一个少一个少一维的的数组。
arr.mean(axis =1 ) Out[89]: array([ 0.24557933, -0.4104083 , 0.25393696, 0.37643717, -0.21891534]) arr.sum(0) Out[90]: array([-2.07128646, 0.46531611, 0.99349228, 1.59899738])
arr = np.array([[0,1,2],[3,4,5],[6,7,8]]) arr.cumsum(0) #按行进行累加计算 Out[93]: array([[ 0, 1, 2], [ 3, 5, 7], [ 9, 12, 15]], dtype=int32) arr.cumprod(1) #按列(二维)进行累积计算 Out[94]: array([[ 0, 0, 0], [ 3, 12, 60], [ 6, 42, 336]], dtype=int32)
4、用于布尔型数组的方法
arr = np.random.randn(100) (arr>0).sum() Out[98]: 55 bools = np.array([False,False,True,True,False]) bools.any() # Any用于测试数组中是否存在一个或多个True Out[100]: True bools.all() # All用于检查数组中所有值是否都是tree Out[101]: False
5、唯一化以及其他的集合逻辑
ndarray的基本集合运算,最常用的应该是np.unique了,他用于找出数组中的唯一值并返回已排序的结果。
import numpy as np names = np.array(['Bob','Joe','Will','Bob','Will','Joe','Joe']) np.unique(names) Out[4]: array(['Bob', 'Joe', 'Will'], dtype='<U4') sorted(set(names)) Out[5]: ['Bob', 'Joe', 'Will']
np.in1d用于测试一个数组中的值在另一个数组中的成员资格,返回一个布尔型数组。
values = np.array([6,0,0,3,2,5,6]) np.in1d(values,[2,3,6]) Out[7]: array([ True, False, False, True, True, False, True], dtype=bool)
6、用于数组文件的输入与输出
将数组以二进制格式保存到磁盘:
np.save和np.load是读写磁盘数组数据的两个主要函数,默认数组是以未压缩的原始二进制格式保存在扩展名为.npy的文件中。
arr = np.arange(10) np.save('some_array',arr) np.load('some_array.npy') Out[11]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
np.savez可以将多个数组保存到 一个压缩卷,将数组以关键字参数的,
np.savez('array_archive.npz',a=arr,b=arr) arch = np.load('array_archive.npz') arch['b'] Out[12]: array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
存取文本文件