Numpy Learning
1.ndarray:Numpy的核心
1.1 特点:1.同质
2.大小固定
1.2 创建ndarray对象——array()/zeros()/ones()/reshape()/random()
import numpy as np
#array()函数创建ndarray对象
a=np.array([1,2,3])
b=np.array([[1,2,3],[4,5,6]])
#zeros()函数生成由shape参数指定维度信息、元素值均为零
c=np.zeros((3,3))
print c
#ones()函数生成由shape参数指定维度信息、元素值均为1
d=np.ones((3,3))
print d
#reshape()按照指定形状改变原数组
e=np.arange(0,12).reshape(3,4)
f=np.linspace(0,10,5)
print e
print f
#random()函数创建一个数组,随机值填充
g=np.random.random((3,3))
print g
[[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[ 0. 2.5 5. 7.5 10. ]
[[ 0.73732349 0.66581575 0.34289376]
[ 0.42007847 0.42966379 0.52146679]
[ 0.46736048 0.70184992 0.78314536]]
1.3 判断是否是ndarray对象 ——type()
type(a)
numpy.ndarray
1.4 ndarray对象的轴、长度、型属性
print a.ndim #轴数量
print a.size #对象的长度
print a.shape #对象的型
1.5 数据类型 dtype选项
f=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],dtype=complex)
print f.dtype
complex128
2. 基本操作
2.1 算法运算符基本运算是元素级运算符对数组每一个元素的操作
org=np.arange(5)
add=org+4
minus=org-2
muti=org*3
divi=org/3
sin=np.sin(org)
sqrt=np.sqrt(org)
print org
print add
print muti
print divi
print sin
print sqrt
[0 1 2 3 4]
[4 5 6 7 8]
[ 0 3 6 9 12]
[0 0 0 1 1]
[ 0. 0.84147098 0.90929743 0.14112001 -0.7568025 ]
[ 0. 1. 1.41421356 1.73205081 2. ]
2.2 矩阵积dot()函数,不是元素级的
A=np.arange(0,9).reshape(3,3)
B=np.arange(2,11).reshape(3,3)
C=np.dot(A,B)
print A
print B
print C
[[0 1 2]
[3 4 5]
[6 7 8]]
[[ 2 3 4]
[ 5 6 7]
[ 8 9 10]]
[[ 21 24 27]
[ 66 78 90]
[111 132 153]]
2.3 自增和自减numpy甚至python没有++ 和--运算符,但是可以使用+=和-=来达到目的——这也是元素级的运算
a=np.arange(4)
print a
a+=1
print a
[0 1 2 3]
[1 2 3 4]
2.4 聚合函数 ##聚合函数是对一组值进行操作,返回一个唯一值作为结果:sum()/min()/max()mean()/std()
a=np.array([3.3,1.5,5.6,8.4,5.1])
print a.sum()
print a.min()
print a.max()
print a.mean()
print a.std()
23.9
1.5
8.4
4.78
2.31637648063
2.5 索引、切片、迭代方法方法同python列表的处理方法
a=np.arange(10,16)
print a
print a[4]
print a[-1]
print a[1:3]
for x in a:
print x
[10 11 12 13 14 15]
14
15
[11 12]
10
11
12
13
14
15
对于迭代处理,如果想用函数处理每一行或者每一列,返回一个数值作为结果,最好使用以下函数:
apply_along_axis()
A=np.arange(0,16).reshape(4,4)
print A
a=np.apply_along_axis(np.mean,axis=0,arr=A) #axis选项为0,按列迭代操作
b=np.apply_along_axis(np.mean,axis=1,arr=A) #axis选项为1,按行迭代操作
print a
print b
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
[ 6. 7. 8. 9.]
[ 1.5 5.5 9.5 13.5]
2.6 形状改变reshape()和ravel()函数
A=np.arange(10,20)
print A
B=A.reshape(2,5)
print B
#A.shape=(2,5)
#print A
C=B.ravel()
print C
[10 11 12 13 14 15 16 17 18 19]
[[10 11 12 13 14]
[15 16 17 18 19]]
[10 11 12 13 14 15 16 17 18 19]
2.7 数组操作
(1) 连接数组vstack()/hstack()/column_stack()/row_stack()
Numpy是使用栈的概念来合并数组的,把数组执行垂直入栈的操作,按行vstack()/row_stack()入栈,按列hstack()/column_stack()入栈
A=np.ones((3,3))
B=np.zeros((3,3))
C=np.vstack((A,B)) #按行入栈,数组的型是6*3
E=np.row_stack((A,B))#按行入栈,数组的型是6*3
print C
print E
D=np.hstack((A,B)) #按列入栈,数组的型是3*6
F=np.column_stack((A,B))#按列入栈,数组的型是3*6
print D
print F
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[ 1. 1. 1.]
[ 1. 1. 1.]
[ 1. 1. 1.]
[ 0. 0. 0.]
[ 0. 0. 0.]
[ 0. 0. 0.]]
[[ 1. 1. 1. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0.]]
[[ 1. 1. 1. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0.]
[ 1. 1. 1. 0. 0. 0.]]
(2) 数组切分vsplit()/hsplit()
A=np.arange(64).reshape(8,8)
print A
print "______________________________"
[B,C]=np.hsplit(A,2)
print B
print C
print "______________________________"
[D,E]=np.vsplit(A,2)
print D
print E
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23]
[24 25 26 27 28 29 30 31]
[32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47]
[48 49 50 51 52 53 54 55]
[56 57 58 59 60 61 62 63]]
______________________________
[[ 0 1 2 3]
[ 8 9 10 11]
[16 17 18 19]
[24 25 26 27]
[32 33 34 35]
[40 41 42 43]
[48 49 50 51]
[56 57 58 59]]
[[ 4 5 6 7]
[12 13 14 15]
[20 21 22 23]
[28 29 30 31]
[36 37 38 39]
[44 45 46 47]
[52 53 54 55]
[60 61 62 63]]
______________________________
[[ 0 1 2 3 4 5 6 7]
[ 8 9 10 11 12 13 14 15]
[16 17 18 19 20 21 22 23]
[24 25 26 27 28 29 30 31]]
[[32 33 34 35 36 37 38 39]
[40 41 42 43 44 45 46 47]
[48 49 50 51 52 53 54 55]
[56 57 58 59 60 61 62 63]]
2.8 对象的副本和视图Numpy中,所有赋值都不会为数组和数组中的元素创建副本
a=np.array([1,2,3,4,5,6])
print a
b=a[2:4]
b[1]=99
#改变b的数值大小,改变的即是a的数值大小
print a
[1 2 3 4 5 6]
[ 1 2 3 99 5 6]
3 Numpy文件的读写
3.1 二进制文件的读写save()/load()函数
data=np.arange(16).reshape(4,4)
print data
np.save("saved_data",data) #保存data数据到saved_data.npy文件
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
load_data=np.load("saved_data.npy")
print load_data
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]
[12 13 14 15]]
3.2 读取文件中列表形式的数据genfromtxt()函数
这个函数三个参数:存放数据的文件名、用于分割值得字符、是否含有标题
data=np.genfromtxt("data.csv",delimiter=",",names=True)
print data
[( 1., 124., 21.4, 254.) ( 2., 54., 5.1, 42.)
( 3., 52., 8.4, 598.)]