数据分析之numpy基本操作

导入包

import numpy as np

查看numpy版本

np.__version__
'1.14.0'

创建ndarray(一维),dtype指定创建的数据类型

arry1=np.array([1,2,3,4],dtype='float')
arry1
array([1., 2., 3., 4.])

创建二维ndarray

arry2=np.array([[1,2,3],[4,5,6]])
arry2
array([[1, 2, 3],
       [4, 5, 6]])

查看array的类型

type(arry1)
numpy.ndarray

查看arry1的形状,2行3列

np.shape(arry2)
(2, 3)

查看arry2的总长度,共有多少个数据

np.size(arry2)
6

创建数据值为1的数组,默认数据类型为浮点型

np.ones((3,4),dtype='int'
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])

创建数据值为0的数组,默认数据类型为浮点型

np.zeros((3,4),dtype='int')
array([[0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0]])

创建数据值为相同的指定值得数组,默认类型为浮点型

np.full((3,4),fill_value=10,dtype='int')
array([[10, 10, 10, 10],
       [10, 10, 10, 10],
       [10, 10, 10, 10]])

创建等差数列,默认数据类型为浮点型,num为有num个数据

np.linspace(start=0,stop=50,num=51,dtype='int')
array([ 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])

创建等差数列,指定差值为stype,100取不到

np.arange(0,100,step=4)
array([ 0,  4,  8, 12, 16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64,
       68, 72, 76, 80, 84, 88, 92, 96])

生成随机整型数组,0-100的3行4列整型随机数组

np.random.randint(0,100,(3,4))
array([[45, 88, 93, 40],
       [22, 32,  3, 54],
       [57, 20, 82, 11]])
使其不再随机变化

固定随机数组,使其不再随机变化

np.random.seed(3)
np.random.randint(0,111,(4,3))
array([[106,  24,   3],
       [ 56,  72,   0],
       [ 21,  19,  74],
       [107,  41,  10]]

生成随机的[0,1)的随机数组

np.random.random((3,4))
array([[0.03225237, 0.87364571, 0.70605397, 0.61450945],
       [0.26603757, 0.9678689 , 0.04791921, 0.71872623],
       [0.7781943 , 0.27845611, 0.19199206, 0.22917275]])

生成对角线为1的n行n列数组

np.eye(4)
array([[1., 0., 0., 0.],
       [0., 1., 0., 0.],
       [0., 0., 1., 0.],
       [0., 0., 0., 1.]])

查看数组的维度

arry2.ndim
2

根据索引查找数值

arry3=np.random.randint(1,100,(4,6))
arry3
array([[ 8, 44, 34, 80, 49, 38],
       [21, 95, 50, 22, 79, 29],
       [55,  1, 65, 19, 64, 38],
       [57, 57, 72, 38, 47, 34]])
arry3[1]
array([21, 95, 50, 22, 79, 29])
arry3[1][2]
50

切片 [n,m),左闭右开

arry3[0:2]
array([[ 8, 44, 34, 80, 49, 38],
       [21, 95, 50, 22, 79, 29]])

获取指定的行列,在切片中[n,:m,j:k]n:m代表行,j:k代表列

arry3[0:2,0:3]
array([[ 8, 44, 34],
       [21, 95, 50]])

将数组进行行倒序

arry3[::-1,]
array([[57, 57, 72, 38, 47, 34],
       [55,  1, 65, 19, 64, 38],
       [21, 95, 50, 22, 79, 29],
       [ 8, 44, 34, 80, 49, 38]])

将数组进行列倒序

arry3[:,::-1]
array([[38, 49, 80, 34, 44,  8],
       [29, 79, 22, 50, 95, 21],
       [38, 64, 19, 65,  1, 55],
       [34, 47, 38, 72, 57, 57]])

将数组进行整体倒序

arry3[::-1,::-1]
array([[34, 47, 38, 72, 57, 57],
       [38, 64, 19, 65,  1, 55],
       [29, 79, 22, 50, 95, 21],
       [38, 49, 80, 34, 44,  8]])

将数组进行变形,前提是数组的总长度一致

arry3.reshape(3,8)
array([[ 8, 44, 34, 80, 49, 38, 21, 95],
       [50, 22, 79, 29, 55,  1, 65, 19],
       [64, 38, 57, 57, 72, 38, 47, 34]])

二维变一维

arry4=arry3.reshape(24)
arry4
array([ 8, 44, 34, 80, 49, 38, 21, 95, 50, 22, 79, 29, 55,  1, 65, 19, 64,
       38, 57, 57, 72, 38, 47, 34])

将一维变二维,指定列为3列,自动生成行,制定行同理

arry4.reshape(-1,3)
array([[ 8, 44, 34],
       [80, 49, 38],
       [21, 95, 50],
       [22, 79, 29],
       [55,  1, 65],
       [19, 64, 38],
       [57, 57, 72],
       [38, 47, 34]])
arry1
array([1., 2., 3., 4.])

一维数组进行级联

np.concatenate([arry1,arry1])
array([1., 2., 3., 4., 1., 2., 3., 4.])

a1=np.random.randint(0,100,(3,4))
a2=np.random.randint(0,100,(3,4))

a1
array([[ 1, 85, 74, 99],
       [91, 16, 80, 32],
       [16, 18, 75, 55]])
a2
array([[96, 95, 13, 37],
       [30, 48, 61, 33],
       [52,  2, 28, 36]])

二维数组进行级联,默认为行级联,axis=0,表示列级联

axis=1,表示行级联

np.concatenate([a1,a2],axis=1)
array([[ 1, 85, 74, 99, 96, 95, 13, 37],
       [91, 16, 80, 32, 30, 48, 61, 33],
       [16, 18, 75, 55, 52,  2, 28, 36]])
级联需要注意的点:
级联的参数是列表:一定要加中括号或小括号
维度必须相同
形状相符:在维度保持一致的前提下,如果进行横向(axis=1)级联,必须保证进行级联的数组行数保持一致。如果进行纵向(axis=0)级联,必须保证进行级联的数组列数保持一致。
可通过axis参数改变级联的方向
ndarray的聚合操作
a1
array([[ 1, 85, 74, 99],
       [91, 16, 80, 32],
       [16, 18, 75, 55]])

求数组中的最大值/最小值max()/min()

a1[2].max()
75

求数组中的平均值

a1.mean()
53.5

求和

a1[0].sum()
259

加,减,乘,除运算

a1+1
array([[  2,  86,  75, 100],
       [ 92,  17,  81,  33],
       [ 17,  19,  76,  56]])

矩阵积np.dot() :两个集合中,a的行数和b的列数必须保持一致

a3=np.random.randint(1,100,(2,2))
a4=np.random.randint(1,100,(2,2))
a3
array([[91, 45],
       [49, 60]]
a4
array([[75, 55],
       [92, 22]])
np.dot(a3,a4)
array([[10965,  5995],
       [ 9195,  4015]])

广播机制

【重要】ndarray广播机制的三条规则:缺失维度的数组将维度补充为进行运算的数组的维度。缺失的数组元素使用已有元素进行补充。
规则一:为缺失的维度补1
规则二:缺失元素用已有值填充
规则三:缺失维度的数组只能有一行或者一列

a=np.ones((4,4),dtype='int')
a
array([[1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1],
       [1, 1, 1, 1]])
b=np.ones(4,dtype='int')
b
array([1, 1, 1, 1])

a+b
array([[2, 2, 2, 2],
       [2, 2, 2, 2],
       [2, 2, 2, 2]])
c=b.reshape(4,1)
c
array([[1],
       [1],
       [1],
       [1]])

a+c
array([[2, 2, 2, 2],
       [2, 2, 2, 2],
       [2, 2, 2, 2],
       [2, 2, 2, 2]])

排序np.sort(x)不改变原数组,x.sort()改变原数组,默认从小到大排序,行排序

arry3
array([[ 8, 34, 29, 44, 49, 80],
       [21, 22, 38, 50, 79, 95],
       [ 1, 19, 38, 55, 64, 65],
       [34, 38, 47, 57, 57, 72]])
np.sort(arry3,axis=0,)
array([[ 1, 19, 29, 44, 49, 65],
       [ 8, 22, 38, 50, 57, 72],
       [21, 34, 38, 55, 64, 80],
       [34, 38, 47, 57, 79, 95]])

猜你喜欢

转载自blog.csdn.net/qq_42055440/article/details/81143038