众所周知,python中3个用于数学计算的库分别是:
numpy scipy pandas
。之前已经介绍过了pandas
的用法,这篇笔记主要介绍numpy
用法。因为numpy是直接封装c语言,所以速度上达到了类似于在c++里面掉包的程度,当然,本身比python自带的数据结构快了n倍。尤其是在大数据处理的时候,差距更为明显。
import numpy as np
import pandas as pd
1.array数组
1.1创建array数组
- np.array
- np.zeros/empty/ones:传入形状即可
- np.arange():比range更强大
- np.diag():对角阵
详细的见下面图片和例子
data1 = [6,7.5,8,0,1]
arr1 = np.array(data1)#创建array
print(arr1)
data2 = [data1,data1]
arr2 = np.array(data2) #多维度
print(arr2)
[ 6. 7.5 8. 0. 1. ]
[[ 6. 7.5 8. 0. 1. ]
[ 6. 7.5 8. 0. 1. ]]
print(arr1.shape,arr2.shape)
print(arr1.dtype,arr2.dtype)
(5,) (2, 5)
float64 float64
print(np.zeros(10)) #创建都是0的array
print(np.empty([2,3,2],dtype=float)) #都是空的array
[ 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
[[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]
[[ 0. 0.]
[ 0. 0.]
[ 0. 0.]]]
print(np.arange(15)) # 类似range函数,但更强大
[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14]
print(np.diag((1,2,3)))# 创建对角阵
x = np.arange(10,19).reshape((3,3))
print(x)
print(np.diag(x)) #提取对角
print(np.diag(x,1)) #注意对角线的位置
[[1 0 0]
[0 2 0]
[0 0 3]]
[[10 11 12]
[13 14 15]
[16 17 18]]
[10 14 18]
[11 15]
1.2array数据类型
- 要使用astype来进行转化。转化的过程中产生一份拷贝。
arr1 = np.array([1,2,3],dtype=np.float64) #初始化显式声明
print(arr1.dtype)
float64
int_arr1 = arr1.astype(np.int) # 类型转化
print(int_arr1.dtype)
#浮点型=>整型。向下取整
strintArr = np.array(['15','1.6'],dtype=np.string_)
print(strintArr)
print(strintArr.astype(np.float))
int32
[b'15' b'1.6']
[ 15. 1.6]
1.3数组运算
不用再写循环了,运算符号会被映射到每个element
1.4切片和索引
注意:如果需要一份拷贝(副本),而不是视图,需要调用arr.copy()/arr[索引]copy()。