天天看点

数据分析-numpy学习

今天和大家分享下最近学习的一些numpy知识,这些都是我一个一个手动码出来的,有兴趣的同事可以一起学习一下。

创建一维数据

创建二维数组

常用属性

调整数组的形状

将数组转换成list形式   

数组和数的计算

三维数组

数组的索引与切片

数组中数值的修改

数组的添加、删除与去重

numpy的计算

数组的拼接

二维数组的转置

创建一维数据

import numpy as np

list1 = [1,2,3,4]

oneArray = np.array(list1)

print(type(oneArray))

print(oneArray)

#创建数组的形式

#1 直接传入列表的形式

t1 = np.array([1,2,3])

print(t1)

#2 传入range生成序列

t2 = np.array(range(100))

print(t2)

#使用numpy自带的np.arrange()生成数组

t3 = np.arange(0,12,2)

print(t3)

创建二维数组

list2 = [[1,2],[3,4],[5,6]]

twoArray = np.array(list2)

print(twoArray)

常用属性

#获取形状

print(twoArray.shape)

#有多少个元素

print(twoArray.size)

调整数组的形状

import numpy as np

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

#修改的是原有的

# four.reshape=(6,)

# print(four)

#返回一个新的数组

five= four.reshape(2,3)

print(five)

#多维数组变成一位数组,默认情况下‘C’是以行为主的顺序展开,‘F’是以列为主的顺序展开

six = four.reshape((6,),order = 'F')

print(six)

将数组转换成list形式   

import numpy as np 

a = np.array([3,5,6,8,9,12])

b = a.tolist()

print(b)

print(type(b))

#将数组转换成list形式

import numpy as np 

a = np.array([3,5,6,8,9,12])

b = a.tolist()

print(b)

print(type(b))

数组和数的计算

import numpy as np

t1 = np.arange(24).reshape(3,8)

print(t1)

print(t1+2)

print(t1*2)

print(t1/2)

#数组与数组之间的操作,注意不同形状的多维数组不能进行计算

import numpy as np

# t1 = np.arange(24).reshape((4,6))

# t2 = np.arange(100,124).reshape((4,6))

# print(t1)

# print(t2)

# print(t1+t2)

# print(t1*t2)

#行数或者列数相同的一维数组和多维数组可以进行计算

# t1 = np.arange(24).reshape((4,6))

# t2 = np.arange(0,6)

# print(t1)

# print(t2)

# print(t1-t2)

#列形状相同(会与每一个相同维度的数组的对应位相操作)

t1 = np.arange(24).reshape((4,6))

t2 = np.arange(4).reshape((4,1))

print(t1)

print(t2)

print(t1-t2)

三维数组

import numpy as np

a = np.arange(27).reshape(3,3,3)

print(a)

b = np.sum(a,axis=0)

print(b)

数组的索引与切片

import numpy as np

a = np.arange(10)

#冒号分割切片参数 start:start:stop 来进行切片操作

print(a[2:7:2])

#如果为[2:],表示从该索引往后的所欲项目都会被提取

print(a[2:])

#多维数据的索引

import numpy as np

t1 = np.arange(24).reshape((4,6))

# print(t1)

# print("******")

# print(t1[1])

# print(t1[1:,:])  #去取连续多行

# print(t1[1:3])  #取连续多行

# print(t2[[1,2,3]])  #取不连续的多行

# print(t1[:,2])  #取一列

# print(t1[:,1:])  #取连续多列

# print(t1[2,3]) #取某一个值

# print(t1[[2,3],[2,3]]) #取多个不连续的值

#print(t[2:3])

数组中数值的修改

import numpy as np

t = np.arange(24).reshape(4,6)

print(t)

#修改某一行的值

#t[2,:] = 0

#修改某一列的值

# t[:,3] = 0

# print(t)

#连续修改多行的值

# t[1:3,:] = 0

# print(t)

#修改连续多列的值

# t[:,1:4] = 0 

# print(t)

#修改多行多列的值

# t[1:4,2:3]=0

# print(t)

#修改多个不相邻的值

# t[[2,3],[1,2]] = 0

# print(t)

#可以根据条件修改,比如讲小于10的值改掉

t[t<10] = 0

print(t)

#使用逻辑判断

# t[(t<2)&(t<6)] = 0  #与

# print(t)

# t[(t<2)|(t>6)] = 0  #或

# print(t)

# t[~(t>6)] = 0  #非

# print(t)

数组的添加、删除与去重

import numpy as np

# a = np.arange(1,7).reshape(2,3)

# print(a)

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

# print(a)

# print('向数组添加元素')

# print(np.append(a,[7,8,9]))  #axis默认为None时,是横向加成,返回总是一维数组!

# print('\n')

# print('沿轴0添加元素')

# print(np.append(a,[[7,8,9]],axis = 0))

# print('沿轴1添加元素')

# print(np.append(a,[[5,5,5],[7,7,7]],axis = 1))

#numpy.insert  函数在给定索引之前,沿给定轴在输入数组中插入值

#如果值的类型转换为要插入,则它与输入数组不同,插入没有原地的,函数会返回一个新数组。此外,如果未提供轴,则输入数组会被展开

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

print(a)

print('未传递Axis参数,在插入前输入数组会被展开')

print(np.insert(a,4,[11,12]))

print('\n')

print('传递了Axis参数,会广播值数组来配输入数组')

print('沿轴0广播:')

print(np.insert(a,1,[11],axis = 0))

print('沿轴1广播:')

print(np.insert(a,1,[11],axis = 1))

#数组中的删除

import numpy as np

a = np.arange(12).reshape(3,4)

print('未传递axis参数,在删除之前数组会被展开')

print(np.delete(a,1))

print('删除每一行中的第二列')

print(a)

print(np.delete(a,1,axis = 1))

#数组去重

#numpy.unique() 函数用于去除数组中的重复元素

'''

arr:输入一维数组,如果不是一维数组则会被展开

return_index:如果为True,返回新列表元素则在旧列表中的位置(下标),并以列表形式存储

return_inserve:如果为true,返回旧列表元素则在新列表中的位置(下标),并以列表形式存储

return_counts:如果为true,返回去重值的元素在原数组中出现的次数

'''

import numpy as np

a = np.array([2,3,4,7,7,8,9,5,4,6,7,8,])

print('第一个数组是:')

print(a)

print('第一个数组的去重值')

u = np.unique(a)

print(u)

# print('去重数组的索引数组:')

# u,indices = np.unique(a,return_index = True)

# print(indices)

print('去重数组的下标')

u,indices = np.unique(a,return_inverse = True)

print(indices)

print('返回去重元素的重复数量')

u,indices = np.unique(a,return_counts = True)

print(u)

print(indices)

numpy的计算

import numpy as np

score = np.array([[86,88],[89,87],[66,68]])

print(score)

#获取所有数据的最大值

# result = np.max(score)

# print(result)

#获取某一轴上的最大值

# result= np.max(score,axis = 1)

# print(result)

#获取最小值

# result = np.min(score)

# print(result)

#获取某一轴上的最小值

# result = np.min(score,axis = 0)

# print(result)

#数组的比较

# result = np.maximum([-2,-1,0,1,2],0)  #第一个参数中的每一个值与第二个参数的值作比较返回最大的值

# print(result)

# result = np.minimum([-2,-2,-1,-3],0)#第一个参数中的每一个值与第二个参数的值作比较返回最小的值

# print(result)

# result = np.maximum([-2,-3,-1,-4],[-2,-3,-5,8]) #接受的2个参数,也可以大小不一致

# print(result)

#求平均值

# result = np.mean(score)

# print(result)

#返回给定axis上的累计和

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

# print(arr)

# print(arr.cumsum(0))

# print(arr.cumsum(1))

#求最小索引值

# result = np.argmin(score,axis = 0)

# print(result)

#求每一列的标准差

# result = np.std(score,axis = 0)

# print(result)

#求极值

result = np.ptp(score)

print(result)

数组的拼接

import numpy as np 

#1、根据轴连接的数组序列

a = np.array([[2,3],[4,5]])

b = np.array([[6,7],[8,9]])

# #要求维度相同

# print('沿轴0连接2个数组')

# print(np.concatenate((a,b),axis = 0))

# print('沿轴1连接2个数组')

# print(np.concatenate((a,b),axis = 1))

#2、根据轴进行堆叠

# print('沿轴0连接2个数组')

# print(np.stack((a,b),axis = 0))

# print('沿轴1连接2个数组')

# print(np.stack((a,b),axis = 1))

#3、矩阵垂直拼接

v1 = np.arange(0,12).reshape(2,6)

v2 = np.arange(12,24).reshape(2,6)

result = np.vstack((v1,v2))

print(result)

#4矩阵水平拼接

result = np.hstack((v1,v2))

print(result)

二维数组的转置

#对换数组的维度

a = np.arange(12).reshape(3,4)

# print('原数组:')

# print(a)

# print('对换数组')

# print(np.transpose(a))

#与transpose一致

a = np.arange(12).reshape(3,4)

print('原数组:')

print(a)

print('\n')

print('转置数组')

print(a.T)

#函数用于交换数组的2个轴

a = np.arange(24).reshape(4,6)

re = a.swapaxes(1,0)

print(a)

print(re)