寒假学习打卡-----numpy的学习(技术咨询vx:keyichen_free
day01
1.数组的创建
# 再进行所有的操作之前,要先导入numpy
import numpy as np
# 创建数组
# 第一种 直接穿甲
arr = np.array([1,2,3])
print(arr)
#输出的结果为[1,2,3]
# 第二种 先创建再转化
ls = [1,2,3]
arr = np.array(ls)
print(arr)
# 同上述结果相同
2.数组的各种函数操作
import numpy as np
ls = [1,2,3,4,5]
arr = np.array(ls)
# 将列表转化为无逗号的一维数组
print(arr)
print("类型:",type(arr))
print("元素类型",arr.dtype)
print("维度:",arr.ndim)
print("长度:",arr.size)
print("长度2:",len(arr))
print("形状:",arr.shape)
print("数组中各个元素大小:",arr.itemsize)
print("跨度:",arr.strides)
# 输出:
[1 2 3 4 5]
类型: <class 'numpy.ndarray'>
元素类型 int32
维度: 1
长度: 5
长度2: 5
形状: (5,)
元素大小: 4
跨度: (4,)
3.数组的遍历
第一种
import numpy as np
arr = np.arange(10)
for _ in range(10):
#对数组进行10遍的遍历
print(arr)
第二种
import numpy as np
ls = list(range(10))
for _ in range(10):
ls01 = [x * 2 for x in ls]
print(ls01)
4.数组的创建
#数组的创建方法01
import numpy as np
np.arrange(2,10,2)
#在2 到10 之间以2 为间隔进行创建
#数组的创建方法02
import numpy as np
np.linspace(2,8)
print(len(np.linspace(2,8)))
# 按照几等分
np.linspace(2,8,3)
#输出:
50
array([2., 5., 8.])
添加:二维数组
import numpy as np
arr = [[1,2,3],[2,3,4]]
arr = np.array(arr)
print("类型:",type(arr))
print("元素类型",arr.dtype)
print("维度:",arr.ndim)
print("size长度:",arr.size)
# size 是总长度
print("len长度2:",len(arr))
print("形状:",arr.shape)
print("元素大小:",arr.itemsize)
print("跨度:",arr.strides)
#输出:
元素类型 int32
维度: 2
size长度: 6
len长度2: 2
形状: (2, 3)
元素大小: 4
跨度: (12, 4)
5.多维数组
数组有一维、二维、三维等
可以使用ndim来看数组的维度
#创建三维数组
import numpy as np
arr = np.array((np.arange(1,10),np.arange(1,10),np.arange(1,10)))
arr
import numpy as np
arr = np.arange(1,25).reshape(2,2,2,3)
print("维度",arr.ndim)
6.结构数组(难点)
#这里展示创建一个结构数组
import numpy as np
#1.设置结构数组的每一个的名字和数据类型
#S20表示字符串类型,字符大小不超过20,f8表示浮点数类型的数据类型
dt = np.dtype([('name','S20'),('student','S9'),('pra/pce','f8',2)])#浮点数
#通过 np.array([内容],dtype = dt) 来设置保存的数据结构的类型
score= np.array([('zhangsan','1234',(13,13))],dtype = dt)
score
7.数组的保存(三种还是保存)
# save : 将数据保存
# load : 将数据载入
# 数据有三种保存的形式
# csv txt npy
# 首先,介绍 .npy 的保存方式
import numpy as np
# 创建一个维度为4 的数组
arr = np.arange(1,25).reshape(2,2,2,3)
#保存和读取
np.save('arr01',arr)
arr02 = np.load('arr01.npy')
print("arr02",arr02)
np.savetxt('arr01.txt',arr)
8.随机数(简化)
import numpy as np
arr = np.random.random()
arr
day02
1.reshape 、flatten、 stack 、 split 、repeat 、titl
在进行维度的转化的时候,可以使用ndim 查看数组的维度
reshape 低维度到高纬度
import numpy as np
arr = np.arange(1,25).reshape((6,-1),order = "F")
# 按照列的方式,order = "F"
arr
#输出:
array([[ 1, 7, 13, 19],
[ 2, 8, 14, 20],
[ 3, 9, 15, 21],
[ 4, 10, 16, 22],
[ 5, 11, 17, 23],
[ 6, 12, 18, 24]])
flatten 高纬度转化为低维度
import numpy as np
arr = np.arange(1,25).reshape((6,-1))
arr01 = arr.flatten(order = "F")
arr01
#输出:
array([ 1, 5, 9, 13, 17, 21, 2, 6, 10, 14, 18, 22, 3, 7, 11, 15, 19,
23, 4, 8, 12, 16, 20, 24])
reveal 只有在列主序打平时复制数组
flatten 都复制的了数组
concatenate函数
import numpy as np
#创建一个二维的数组
arr = np.arange(1,7).reshape(2,3)
#创建一个二维的数组
arr_1 = np.arange(6,12).reshape(2,3)
#将两个数组合在一块
np.concatenate([arr,arr_1],axis = 0)
#输出:
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 6, 7, 8],
[ 9, 10, 11]])
hstack
import numpy as np
arr = np.arange(1,7).reshape(2,3)
arr_1 = np.arange(6,12).reshape(2,3)
np.hstack([arr,arr_1])
#输出:(从高度上进行,变成了二维数组)
array([[ 1, 2, 3, 6, 7, 8],
[ 4, 5, 6, 9, 10, 11]])
dstack
import numpy as np
arr = np.arange(1,7).reshape(2,3)
arr_1 = np.arange(6,12).reshape(2,3)
arr03 = np.dstack([arr,arr_1])
print(arr03.ndim)
print(arr03)
#输出:(从深度上进行,变成三维数组)
[[[ 1 6]
[ 2 7]
[ 3 8]]
[[ 4 9]
[ 5 10]
[ 6 11]]]
2.数组的输出
print(np.r_[-2:2:1,[0]*3,5,6])
print(np.r_['r',-2:2:1,[0]*3,5,6])
# r 是默认,沿着行的方向
print(np.r_['c',-2:2:1,[0]*3,5,6])
# c 沿着列的方向
#输出:
[-2 -1 0 1 0 0 0 5 6]
[[-2 -1 0 1 0 0 0 5 6]]
[[-2]
[-1]
[ 0]
[ 1]
[ 0]
[ 0]
[ 0]
[ 5]
[ 6]]
print(np.r_['0,2,0',[1,2,3],[4,5,6]])
#对维度的方向进行
#输出:
[[1]
[2]
[3]
[4]
[5]
[6]]
3.一维数组的排列
import numpy as np
arr = np.array([3,4,1,2,9,6])
arr.sort()
# 默认从小到大排序
print(arr)
arr[::-1]
# 以倒叙的方式
#输出:
[1 2 3 4 6 9]
array([9, 6, 4, 3, 2, 1])
4.多维数组的排列
# 对多维数组的排序
import numpy as np
np.random.seed(1000)
arr = np.random.randint(40,size=(3,4))
print(arr)
arr.sort()
print(arr)
# 多维度的默认是按一行来排序的
[[ 0 7 23 30]
[ 0 1 25 28]
[27 28 36 36]]
import numpy as np
np.random.seed(1000)
arr = np.random.randint(40,size=(3,4))
print(arr)
arr[:,0]
print(arr)
# 只对第一列进行排序
# 对多维数组的排序
import numpy as np
np.random.seed(1000)
arr = np.random.randint(40,size=(3,4))
arr.sort(axis = 1)
print(arr)
# axis = 1,按照行的方式进行排序
# axis = 0 ,按照列的方式进行排序,这个不会进行行排序
5.间接排列
使用特定的参数进行间接排序
np.argsort()
import numpy as np
a = [1,5,1,4,3,4,4] # First column
b = [9,4,0,4,0,2,1] # Second column
ind = np.lexsort((b,a)) # 先排列 a 在排列 b
#ind 得到的是排列的索引值
print(ind)
[(a[i],b[i]) for i in ind]
surnames = ('Hertz', 'Galilei', 'Hertz')
first_names = ('Heinrich', 'Galileo', 'Gustav')
ind = np.lexsort((first_names, surnames))
ind
[surnames[i] + ", " + first_names[i] for i in ind]
#输出:
surnames = ('Hertz', 'Galilei', 'Hertz')
first_names = ('Heinrich', 'Galileo', 'Gustav')
ind = np.lexsort((first_names, surnames))
ind
[surnames[i] + ", " + first_names[i] for i in ind]
6.视图和复制
view 视图化,会对原数组进行修改
copy 对原数组的副本进行操作
arr = np.arange(6)
arr_view = arr.view()
arr_view[0] = 5
# 对数组的第一个元素进行更改
arr
arr = np.arange(6)
arr_copy = arr.copy()
arr_copy[0] = 5
arr
# 并未对数组造成任何改变
7.添加和删除‘
# 添加和删除
arr = np.arange(6)
print(arr)
np.insert(arr,1,100)
arr
8.对数组进行去重(两种)
# 利用容器型数据和数组去重
s = 'adsdasdadadadadad'
sets = set(s)
sets
# set 对其进行去重
s = 'adsdasdadadadadad'
sets = np.unique(list(s))
# s数组的方式对其进行去重
sets
9.repeat
repeat 是在元素层面的,复制数组中指点的元素,多维的情况下多了用轴控制
一维
import numpy as np
arr = np.arange(3)
print(arr)
arr_1= arr.repeat(3)
print(arr_1)
arr_2 = arr.repeat([1,2,3])
print(arr_2)
#输出:
import numpy as np
arr = np.arange(3)
print(arr)
arr_1= arr.repeat(3)
print(arr_1)
arr_2 = arr.repeat([1,2,3])
print(arr_2)
二维
# 二维
arr = np.arange(6).reshape(2,3)
print(arr)
#转化为一维数组
arr_01 = arr.repeat(3)
print(arr_01)
#
arr_02 = arr.repeat(2,1)
print(arr_02)
#在二维数组的层面上进行
arr_03 = arr.repeat(2,axis = 1)
print(arr_03)
#输出:
[[0 1 2]
[3 4 5]]
[0 0 0 1 1 1 2 2 2 3 3 3 4 4 4 5 5 5]
[[0 0 1 1 2 2]
[3 3 4 4 5 5]]
[[0 0 1 1 2 2]
[3 3 4 4 5 5]]
10.titl
titl 是在数组层面的,复制数组的本身,整数型,元组型
arr = np.arange(6).reshape(2,3)
arr_01 = np.tile(arr,2)
arr_01
#输出:
#array([[0, 1, 2, 0, 1, 2],
# [3, 4, 5, 3, 4, 5]])
arr_01 = np.tile(arr,(2,3))
arr_01
#行复制两遍,列复制三遍
#输出:
#array([[0, 1, 2, 0, 1, 2, 0, 1, 2],
# [3, 4, 5, 3, 4, 5, 3, 4, 5],
# [0, 1, 2, 0, 1, 2, 0, 1, 2],
# [3, 4, 5, 3, 4, 5, 3, 4, 5]])
day03
1整合计算
所有元素进行计算
可选择不同的轴进行计算
import numpy as np
arr = np.arange(3)
print(arr)
print("所有元素之和:",np.sum(arr))
print("在轴为0 上的合",arr.sum(axis = 0))
#输出:
[0 1 2]
所有元素之和: 3
在轴为0 上的合 3
二维数组的整合计算
# 二维数组的整合运算
import numpy as np
arr = np.arange(6).reshape(2,3)
print(arr)
print("在轴为0",arr.sum(axis = 0))
print("在轴为1",arr.sum(axis = 1))
#输出:
[[0 1 2]
[3 4 5]]
在轴为0 [3 5 7]
在轴为1 [ 3 12]
2.最小值的计算
# 使用最小值计算
import numpy as np
arr = np.array([5,6,7,4,3,5])
print("最小值",arr.min())
print("最小值的索引位置",arr.argmin())
#输出:
最小值 3
最小值的索引位置 4
3.求均值
arr = np.arange(6)
print("均值",arr.mean())
#输出:
均值 2.5
4.对nan进行计算
5.广播机制(对数组进行快速的填充)
# 过程、
# 确认广播轴,将将形状较小的数组维度(轴)补齐
# 复制元素,顺着需要补齐的轴,将形状较小的数组元素进行复制,最终和形状大的数组形状一致
# 通过np.newaxis()提升维度
x = np.arange(3)
x[:, np.newaxis]
x[:, None]
# 广播机制要看形状相不相同
# 如果确实,用1补齐
# 首先考虑数组的形状是否相等
# 如果形状相容,确认数组最终一致性的情况,其形状在每个维度等于
# 1、维度相同,形状不同
# 2.维度不同
# 若原数组是(2,3,4),这可以沿着轴0 进行广播的(3,4)或(1,3,4)
arr = np.arange(24).reshape(2,3,4)
print(arr)
arr100 = 100 * np.ones((3,4),dtype = np.int)
print(arr + arr100)
# 若原数组是(2,3,4),这可以沿着轴0 进行广播的(3,4)或(1,3,4)
arr = np.arange(24).reshape(2,3,4)
print(arr)
arr100 = 100 * np.ones((3,4),dtype = np.int)
print(arr + arr100)
# 沿着轴1 进行广播的情况下,接收的是(2,1,4)
arr = np.arange(24).reshape(2,3,4)
print(arr)
arr100 = 100 * np.ones((2,4),dtype = np.int)
print(arr + arr100[:,np.newaxis,:])
[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]
[[[100 101 102 103]
[104 105 106 107]
[108 109 110 111]]
[[112 113 114 115]
[116 117 118 119]
[120 121 122 123]]]