python 科学计算学习一:numpy快速处理数据(1)


以下是记录的numpy使用过程中比较重要的,建议亲自敲一下,比较有效果。


import numpy as np


1,a=np.array([1,2,3,4]) 由 a.shape知道a是一个列向量,而a=([[1,2,3,4]])是一个横向量;

2,c=array([[1, 2, 3, 4],
[4, 5, 6, 7],
[7, 5, 6, 8]]) 对c的shape属性赋值可以改变数组的形状。c.shape=4,3 就是将这个3*4的数组变为4*3的数组;结果是:

array([[1, 2, 3], 当你懒得算有计算每一排有几个的时候可以这样写:c.shape=4,-1 这样的想过也是一样的。但是不能均分的时候就会报错。
[4, 4, 5],
[6, 7, 7],
[5, 6, 8]])

3,d=c.reshape 是在不改变原来数据的情况下实现对数据的变形;

4,type(c)查看c的数据类型,c.dtype查看c里面的数据的类型;所以也可以在定义的时候就定下数据类型, b=np.array([1.2,2,2,3.1],dtype=np.int),结果是array([1, 2, 2, 3])

5,arange()相当于函数range(),指定开始值,终值,步长来创建一维数组。注意不包括终值,例如: b=np.arange(0,1,0.2) ,结果是:array([ 0. , 0.2, 0.4, 0.6, 0.8]) 。但是linspace()却是要包括终值的。他是指定开始值,终值,数据个数来创建一维数组。例如: b=np.linspace(1,9,10) 就是要将1到9之间均分为9份,结果是:array([ 1. , 1.88888889, 2.77777778, 3.66666667, 4.55555556,
5.44444444, 6.33333333, 7.22222222, 8.11111111, 9. ]) ;

6, zeros(),ones(),empty()都是按照指定的形状生成相应的数组。例如: np.ones((2,3))array([[ 1., 1., 1.], [ 1., 1., 1.]]) np.zeros((3,4),dtype=np.float)array([[ 0., 0., 0., 0.], [ 0., 0., 0., 0.],[ 0., 0., 0., 0.]]) 唯一不同的是 np.empty((5,2))array([[ 2.43631958e-266, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000],
[ 0.00000000e+000, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000], [ 0.00000000e+000, 0.00000000e+000]])里面不是数据,而是给数据分配的空间地址

7,切片 a=np.arange(0,10,1) 用a[3:7] 表示 a[3] 到a[6]的所有元素组成的数组=array([3, 4, 5, 6]) ;还可以在其中加上步长,但都不包括最后一个元素。 而a[:-1],其中含有负数就表示从后面开始;若是步长为负数,表示倒序排列,如:a[7:1:-1] 结果是array([7, 6, 5, 4, 3, 2])。

8,通过整数列表获得元素组成新的数组:a[[1,2,2,3,5]] 取出a中的元素构成新的数组,结果是array([1, 2, 2, 3, 5]);下标也可是负数;

9,np.random.rand(10) 产生数值为0~1的随机数组;

10,记住一个特别的例子:

a=np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)
>>> a
array([[ 0, 1, 2, 3, 4, 5],
[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[30, 31, 32, 33, 34, 35],
[40, 41, 42, 43, 44, 45],
[50, 51, 52, 53, 54, 55]]) 其中 a[3,3:6]表示第4行的第4到6列,结果是array([33, 34, 35]);a[:2] 表示前两列:array([[ 0, 1, 2, 3, 4, 5],[10, 11, 12, 13, 14, 15]]) 而

a[:,2] 表示第3列,array([ 2, 12, 22, 32, 42, 52])

a[1::,::2]表示的是
array([[10, 12, 14],
[20, 22, 24],
[30, 32, 34],
[40, 42, 44],
[50, 52, 54]])

注意区分:

a[:2] 和a[[0,1]] a[[0,1],:]都可以表示上面的结果。但是第一个切片是按顺序的,第二个可以随意。比如说:

>>> a[[1,2,0,2]]
array([[10, 11, 12, 13, 14, 15],
[20, 21, 22, 23, 24, 25],
[ 0, 1, 2, 3, 4, 5],
[20, 21, 22, 23, 24, 25]])


评论关闭