python学习—Numpy包

教程为《利用python进行数据分析》,本人已进行基本入门学习,利用此处书对Numpy包及pandans包学习。


Numpy包

 

一、概念:

ndarray N维数组对象,多维数据容器,所元素必须同类型,包含:

1、 shape: 一个表示各位维度大小的元组(描述从外向里,见后面栗子);

2、 dtype:一个明确数据类型的对象

 

二、创建ndarray数组

>>import numpy as np    #np是惯用名

>>data = [[1,2,3,4],[2,3,4,5]]

>>array = np.array(data)

>>array 

array([[1, 2, 3, 4], [2, 3, 4]], dtype=object)    #含array标志的numpy数组

>>array.shape

(2L,4L)          #最外是两个维度,每个维度里又有四个维度

>>array.dtype

dytpe('int64')


zeros 和ones

>>np.zeros((2,3))    #双括号表示数字必须zeros的第一参数

array([0.,0.,0.],

    [0.,0.,0.,])

同理ones创建全为1的数字;np.empty 创建没有任何具体数字的数组


三、ndarray的数据类型

int8 :有符号的8位整型

folat64 :  标准的双精度浮点数,32则为单精度


astype数据类型转换:

>> folat_array = array.astype(np.folat64)

>>folat_array.dtypr

dtype('folat64')


四、数组和标量运算

大小相等的数字之间任何运算会应用到元素级;(栗子略)


五、基本索引和切片

>>arr = np.arange(10)  

>>arr[5]

5

>>arr[5:8]

array([5,6,7])

>>arr[5:8]=10

>>arr

arr([1,2,3,4,10,10,10,8,9])   #替换索引的值


对于高维数组,索引由外向内(此处结合shape理解会比较清晰)

>>data = [[1,2,3,4],[2,3,4,5]]

>>array = np.array(data)

>>array[0]

array([1,2,3,4])

>>array[1][3]   #务必区别于 array[[1,3]],后者为花式索引

5

>>array[1,3]   #括号内的数字个数须小于数组的维数

5


切片索引

原理同索引,array[:2]  


布尔型索引

要true,不要false

>>data = [[1,2,3,4],[2,3,4,5]]

>>data[([T]RUE,FALSE)]  #布尔型数组的长度必须和被索引的轴长度(最外的维度)一致

 array([1,2,3,4])


花式索引

利用整数数组进行索引

>> array[[2,3]]  #取array第3、4位数组


六、数组转置和轴转换

>>array.T  #实现转置


七、通用函数

应用至元素级

>>arr = np.arange(5)

>>np.sqrt (arr)    # 利用numpy包中的ufunc,区别于math.sqrt

array([0,1,1.414,1,73,2])


八、利用数组进行数据处理(矢量化数组运算,重要)

矢量化数组运算是numpy包最大优势,比纯python方式简单、并且快;(学过R的知道R语言就是这种方法)


将条件逻辑表述为数组运算

>>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

cond = np.array([True,False,True,True,False])

根据cond值选取,T选x,F选y

>>result = [(x if c else y)

       for x,y,c in zip(xarr,yarr,cond)]

[1.1000000000000001, 2.2000000000000002, 1.3, 1.3999999999999999, 2.5]


利用np.where提高速度(记住这个用法)

>>result = np.where(cond,xarr,yarr)  #第一个参数为布尔条件,第二个位条件为T执行,第三个条件为F执行

[ 1.1  2.2  1.3  1.4  2.5]

其他栗子:

两组布尔值cond1,cond2,根据4种不同的布尔组合赋予不同的值

np.where(cond1 & cond2,0,np.where(cond1,1,np.where(cond2,2,3)))


数学和统计方法

>>arr = np.random.randn(5,4)   #生成正态分布的数据

>>arr.mean()

0.062814911084854597


>>arr.mean(axis=1)  #接受一个axis参数,1为行,0为列

array([-1.2833,0.2844,0.6574,0.6745,-0.0187])


用于布尔型数组的方法

>>arr = randn(100)

>>(arr >0 ).sum()  #正值的数量,布尔条件放在“函数”前面

44


排序

>>arr.sort(1)  #括号内简略了axis=1,按行排序


唯一花以及其他的集合逻辑

>>np.unique(arr)   #返回唯一元素的

>>a = [[1,1,5],[7,2,2]]
>>b = np.array(a)
>>np.unique(b)

array([1, 2, 5, 7])   #返回一维的数组


九、用于数组的文件输入输出

np.save和np.load 两个函数

 >>arr = np,arange(10)

>>np.save('some_array',arr)  #参数为文件名加变量名


>>np.load('some_arry.npy')  #参数为文件名


十、线性代数

满足矩阵运算要求的两数组可以直接运算











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值