python 数据处理第一章 numpy库的基本用法

来源:互联网 发布:java float和Float 编辑:程序博客网 时间:2024/06/06 05:06

ndarray数组基本知识

import numpy as np

ndarray instance properties(实例属性)

ndim 维数 itemsize 元素占用的字节数 dtype 元素类型 shape形状

x=np.array([1,2,3,4])
y=np.array([[1,2,3,4],[5,6,7]])
z=np.array([[1,2,3,4],[2,3,4,5]])
print(“x.shape:”,x.shape,”y.shape:”,y.shape,”z.shape:”,z.shape)#行主序
print(“x.itemsize:”,x.itemsize,”y.itemsize:”,y.itemsize,”z.itemsize:”,z.itemsize)
print(“x.dtype:”,x.dtype,”y.dtype:”,y.dtype,”z.dtype:”,z.dtype)
print(“x.ndim:”,x.ndim,”y.ndim:”,y.ndim,”z.ndim:”,z.ndim)
print(“x.size:”,x.size)#[1 2 3 4]
print(“y.size:”,y.size)#[list([1, 2, 3, 4]) list([5, 6, 7])]
print(“len(z):”,len(z))#Return the number of items in a container 最外层的个数.

ndarray constructor(构造器)

1.arange(start,stop(最后一个数小于stop),step(步长),dtype)

print(“np.arange(10,dtype=int):”,np.arange(10,dtype=int))
print(“np.array(1,10,2,dtype=float):”,np.arange(start=1,stop=10,step=2.73,dtype=float))

2.linspace(start,stop,num(个数),endpoint(最后一个元素是否算上),restep(是否将步长返回))

print(“np.linspace(start=12,stop=40,num=20,endpoint=False,retstep=True):”,np.linspace(start=12,stop=40,num=20,endpoint=False,retstep=True))
print(“np.linspace(start=12,stop=40,num=20,endpoint=True,retstep=False):”,np.linspace(start=12,stop=40,num=20,endpoint=True,retstep=False))

3.zeros, ones, full ,eye

print(“np.zeros((2,4)):”,np.zeros((1,4)))
print(“np.ones(4,):”,np.ones((4,)))
print(“np.full((1,2),2):”,np.full((4,1),2))
print(“np.eye(3):”,np.eye(3))#nxn单位矩阵

4.ones_like, zeros_like, full_like(a,val)

print(“np.ones_like(x):”,np.ones_like(x))
print(“np.zeros_like(x):”,np.zeros_like(x))
print(“np.full_like(x,2):”,np.full_like(x,2))

ndarray conversion(convert)(数组变换)

1.concatenate

print(“np.concatenate(x,y):”,np.concatenate((x,y)))#要求维度相同All the input arrays must have same number of dimensions
print(“np.concatenate(x,y).shape:”,np.concatenate((x,y)).shape)

2.instance conversion method

1) y=x.reshape(shape)不改变数组元素,返回一个shape形状的原数组的view(实在不行时再返回copy),原数组不变 和y=np.reshape(x,new_shape)一样

z=np.array([[1,2],[3,4],[3,5],[2,6]])
z_reshape=z.reshape((4,2))
z_T_reshape=z.T.reshape((2,4))
print(“np.may_share_memory(z,z_reshape)?”,np.may_share_memory(z,z_reshape))
print(“np.may_share_memory(z,z_T_reshape)?”,np.may_share_memory(z,z_T_reshape))
print(“z.flags[‘OWNDATA’]?”,z.flags[‘OWNDATA’])
print(“z_reshape.flags[‘OWNDATA’]?”,z_reshape.flags[‘OWNDATA’])
print(“z:”,z)

print(“z_reshape[0,:]:”,z_reshape[0,:])

z_reshape.resize((2,4))
print(“z_reshape.resize((2,4)):”,z_reshape)
print(“z:”,z)

reshape_2=np.array([1,2,3,4]).reshape((2,2))
reshape_2.resize(4,1)
print(“reshape_2:”,reshape_2)

z_2=z
z.resize((2,4))#2)x.resize(shape)修改原数组,没有返回值
print(“z_2:”,z_2)
print(“z:”,z)

np.resize(x,new_shape)新生成一个数组,占用不同的内存空间

np_resize=np.resize(z,(4,2))#不改变原数组
print(“z:”,z)
print(“np.may_share_memory(np_resize,z)?”,np.may_share_memory(np_resize,z))

3)降维

x.flatten() Return a copy of the array collapsed into one dimension.

np.ravel(x,order=’C’) It is equivalent to reshape(-1, order=order) 不改变原数组 返回的有可能是copy 有可能是view(占用同一内存空间,别名)

np_ravel=np.array([[1,2,3],[4,3,5]])
copy_np_ravel=np.ravel(np_ravel[:,0])#返回copy 空间不连续,只能新生成一个数组

print(“np.may_share_memory(np_ravel,copy_np_ravel)?”,np.may_share_memory(np_ravel,copy_np_ravel))
print(“copy_np_ravel.flags[‘OWNDATA’]?”,copy_np_ravel.flags[‘OWNDATA’])
print(“copy_np_ravel.base is np_ravel?”,copy_np_ravel.base is np_ravel)

view_np_ravel=np.ravel(np_ravel)#内存是连续的,只是看待内存的方式不一样 返回一view
print(“np.may_share_memory(np_ravel,view_np_ravel)?”,np.may_share_memory(np_ravel,view_np_ravel))
print(“view_np_ravel.flags[‘OWNDATA’]?”,view_np_ravel.flags[‘OWNDATA’])
print(“view_np_ravel.base is np_ravel?”,view_np_ravel.base is np_ravel)

print(“np_ravel np.ravel:”,np.ravel(np_ravel))
print(“np_ravel x.reshape(-1):”,np_ravel.reshape(-1))

4)y=x.astype(new_type)改变itemtype,返回新生成的数组

5)x.tolist() ndarray对象-》python中的原生list类型

print(“z.flatten():”,z.flatten())
new_array=x.astype(float)
print(“new_array:”,new_array)
print(“x:”,x,”x.tolist():”,x.tolist())

ndarray 数组的索引和切片

1.一维数组的索引和切片

x=np.array([1,2,3,4,5])
print(“x[2]”,x[2])
print(“x[1:4:2]”,x[1:4:2])#起始编号,终止编号(不含),步长
print(“x[:]:”,x[:])

2.多维数组的索引和切片

x=np.arange(24).reshape((4,6))
print(“x:”,x)
print(“x[1,2]:”,x[1,2])
print(“x[:,1:20:2]:”,x[:,1:4:2])

ndarray 数组运算

大小相等的数组之间的任何算术运算都会将运算应用到元素级。同样,数组与标量的算术运算也会将那个标量值传播到各个元素。不同大小的数组之间的运算叫做广播。

x=np.array([1,2,-3,-4.5,5])
x=x/x.mean()#mean(数组元素均值
print(“x:”,x)

1)一元函数

x=np.array([1,2,3,4.3,5.6])
print(“np.abs(x):”,np.abs(x))#abs和fabs,abs是整数取绝对值,而fabs是指浮点数取绝对值
print(“np.fabs(x):”,np.fabs(x))
print(“np.sqrt(x):”,np.sqrt(x))#平方根
print(“np.square(x):”,np.square(x))#平方
print(“np.log(x):”,np.log(x))#e为底的对数
print(“np.log2(x):”,np.log2(x))
print(“np.log10(x):”,np.log10(x))
print(“np.ceil(x):”,np.ceil(x),” np.floor(x):”,np.floor(x))#ceiling(向上取整) and floor(向下取整)
print(“np.rint(x):”,np.rint(x))#四舍五入
print(“np.modf(x):”,np.modf(x))#返回一个元组,里面是各元素的额小数部分和整数部分各形成独立的数组

np.cos(x) np.sin(x) np.tan(x) np.exp(x) np.sign(x)(各元素取符号函数)

print(“np.cos(x):”,np.cos(x))
print(“np.exp(x):”,np.exp(x))
print(“np.sign(x):”,np.sign(x))

2)二元函数 同shape 不同shape进行广播(broadcast)处理

+ - * **(乘方) /

y=np.array([1,2,3,4,10.46])
print(“x+y:”,x+y)

np.maximum(x,y) np.fmax(x,y)

np.minimum(x,y) np.fmin(x,y)

各个元素比较之后,对应的较大者或较小者组成一个新的同shape的数组

print(“np.maximum(x,y):”,np.maximum(x,y))
print(“np.fmin(x,y):”,np.fmin(x,y))

np.mod(x,y) x/y 对应元素相除剩下的余数

print(“np.mod(x,y):”,np.mod(x,y))

np.copysign(x,y)将y的符号赋予x

print(“np.copysign(x,y):”,np.copysign(x,y))

原创粉丝点击