寒假学习打卡第一篇文章-----numpy的学习

寒假学习打卡-----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]]]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeyichenCRAZY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值