numpy学习

numpy学习

提示:本文按照作者的个人见解完成,不代表观点的正确;如有侵权,请联系作者删除。
参考资料:

https://www.bilibili.com/video/BV1hx411d7jb?p=14
https://www.bilibili.com/video/BV1U7411x76j?p=2

文章目录

  • numpy学习
  • 一、numpy学习
    • 1.numpy数据类型
    • 2.numpy数组形状
    • 3.创建array快捷函数
    • 4.索引查询
    • 5.random随机函数
    • 6.数据统计函数
    • 7.计算满足条件元素个数
    • 8.给数组增加维度
    • 9.数据合并操作


一、numpy学习

1.numpy数据类型

array对象的背景:

  • numpy的核心数据结构,就叫做array数组,array对象可以是一维数组,也可以是多维数组
  • python的list也可以实现相同的功能,但是array比list的优点在于性能好,包含数组元数据类型,大量的便捷函数
  • numpy成为事实上的scipy,pandas,TensorFlow,paddlepaddle等框架的底层语言
  • numpy的array和python的list的一个区别,是它的元素必须都是同一种数据类型,比如都是数字int类型,这也是numpy高性能的原因之一

array本身的属性:

  • shape:返回一个元组,表示array的维度
  • ndim:一个数字,表示array的维度数目
  • size:一个数字,表示array中所有数据元素的数目
  • dtype:array中元素的数据类型

创建array的方法:

  • 从python的列表list和嵌套列表创建array
  • 使用预定函数arange,ones/ones_like,zeros/zeros_like,empty/empty_like,full/full_like、eye等函数创建
  • 生成随机数的np.random创建

array本身支持的大量操作和函数:

  • 直接逐元素的加减乘除算数操作
  • 更好用的面向多维数组索引
  • 求sum、mean等聚合函数
  • 线性代数,如求逆矩阵,解方程组

numpy学习_第1张图片

import numpy as np
import random
# 使用numpy生成数组,得到ndarray的数据类型
t1 = np.array([1, 2, 3])
print(t1)
print(type(t1))
t2 = np.array(range(10))
print(t2)
t3 = np.arange(10)
print(t3)
t4 = np.arange(4, 10, 2)
print(t4)
print(t4.dtype)
# numpy中的数据类型
t5 = np.array(range(1,4),dtype=float)
print(t5)
print(t5.dtype)
# numpy中的bool类型
t6 = np.array([1,1,0,0,1],dtype=bool)
print(t6)
print(t6.dtype)
# 调整数据类型
t7 = t6.astype('int8')
print(t7)
print(t7.dtype)
# numpy中的小数
t8 = np.array([random.random() for i in range(10)])
print(t8)
# numpy取小数
t9 = np.round(t8,3)
print(t9)
t10 = np.array(['%.2f'%i for i in t8])
print(t10)

numpy学习_第2张图片

2.numpy数组形状

import numpy as np

# 使用numpy生成数组,得到ndarray的数据类型
t1 = np.array([1, 2, 3])
print(t1.shape)
t2 = np.array([[1, 2, 3],[4,5,6]])
print(t2.shape)

# 修改数组形状
t3 = np.arange(12)
print(t3)
t4 = t3.reshape(2,6)
print(t4)
t5 = np.arange(24).reshape(2,3,4)
print(t5)
t6 = t5.reshape(4,6)
print(t6)
t7 = t5.reshape(24,)
print(t7)
t8 = t5.reshape(24,1)
print(t8)
# 计算元素个数
print(t6.shape[0]*t6.shape[1])
# 转换为一维
print(t5.flatten())

numpy学习_第3张图片
numpy学习_第4张图片
在这里插入图片描述

# 数组计算
t9=t6+2
print(t9)
t10=t6-2
print(t10)
t11=t6*2
print(t11)
t12=t6/2
print(t12)
t13=t6/0
print(t13)

# 数组与数组相加
t14=t6+t9
print(t14)
t15=np.arange(6)
t16=t14+t15
print(t16)
t19=t6*t15
print(t19)
t17=np.arange(4).reshape(4,1)
t18=t6-t17
print(t18)

numpy学习_第5张图片
numpy学习_第6张图片
numpy学习_第7张图片

3.创建array快捷函数

import numpy as np

# 使用array创建数字序列
t1 = np.arange(10)
print(t1)
t2 = np.arange(2, 10, 2)
print(t2)
# 使用ones创建全是1的数组
t3 = np.ones(10)
print(t3)
t4 = np.ones((2, 3))
print(t4)
# 使用ones_like创建形状相同的数组
t5 = np.ones_like(t1)
print(t5)
t6 = np.ones_like(t2)
print(t6)
# 使用zeros创建全是0的数组
t7 = np.zeros(10)
print(t7)
t8 = np.zeros((2, 3))
print(t8)
# 使用zeros_like创建形状相同的数组
t9 = np.zeros_like(t1)
print(t9)
t10 = np.zeros_like(t2)
print(t10)

numpy学习_第8张图片


# 使用empty创建的数组
t11 = np.empty(10)
print(t11)
t12 = np.empty((2, 3))
print(t12)
# 使用empty_like创建形状相同的数组
t13 = np.empty_like(t1)
print(t13)
t14 = np.empty_like(t2)
print(t14)
# 使用full创建全一样的数组
t15 = np.full(10,888)
print(t15)
t16 = np.full((2, 3),888)
print(t16)
# 使用full_like创建形状相同的数组
t17 = np.full_like(t1,888)
print(t17)
t18 = np.full_like(t2,888)
print(t18)

numpy学习_第9张图片

# 使用random生成随机数
t19 = np.random.randn()
print(t19)
t20=np.random.randn(3)
print(t20)
t21=np.random.randn(2,3,4)
print(t21)

numpy学习_第10张图片

4.索引查询

三种索引方式:基础索引、神奇索引、布尔索引

import numpy as np

a = np.arange(10)
b = np.arange(20).reshape(4, 5)

# 基础索引
# 一维数组
print(a[2], a[5], a[-1])
print(a[2:4])
print(a[2:-1])
print(a[-3:])
print(a[:-3])

# 二维数组
print(b[0, 0])
print(b[-1, 2])
print(b[2])
print(b[-1])
print(b[:-1])
print(b[:2, 2:4])
print(b[:, 2])
# 切片的修改会改变原数组
b[2:4] = 66
print(b)
b[:1, :2] = 88
print(b)

numpy学习_第11张图片

# 神奇索引
# 一维数组
x = np.arange(2, 10)
indexs = np.array([[0, 2], [1, 3]])
print(x[indexs])
# 案例:寻找数组中最大的前N个数字
arr=np.random.randint(1,100,10)
print(arr)
print(arr.argsort()[-3:])
print(arr[arr.argsort()[-3:]])   #arr.argsort()会返回排序后的索引,取最大值对应的3个下标
# 二维数组
y=np.arange(20).reshape(4,5)
print(y)
print(y[[0,2]])
print(y[[0,2],:])
print(y[:,[0,2,3]])
print(y[[0,2,3],[1,3,4]])   #返回01,23,34位置的元素

numpy学习_第12张图片

# 布尔索引
# 一维数组
print(a>5)
print(a[a>5])
a[a<=5]=0
a[a>5]=1
print(a)
a[a<5]+=20
print(a)
#二维数组
print(y>5)
print(y[y>5])
print(y[:,3])
print(y[:,3]>5)
print(y[y[:,3]>5])
y[y[:,3]>5]=66
print(y)

numpy学习_第13张图片

#组合查询
z=np.arange(10)
con=(z%2)==0|(z>7)
print(z[con])

在这里插入图片描述

5.random随机函数

numpy学习_第14张图片

import numpy as np

np.random.seed(666)
# 1.rand(d0,d1,...,dn) 返回数据在[0,1]之间,具有均匀分布
t1=np.random.rand(5)
print(t1)
t2=np.random.rand(3,4)
print(t2)
t3=np.random.rand(2,3,4)
print(t3)

# randn(d0,d1,...,dn) 返回数据具有标准正态分布(均值为0,方差为1)
t4=np.random.randn(5)
print(t4)
t5=np.random.randn(3,4)
print(t5)
t6=np.random.randn(2,3,4)
print(t6)

#randint(low[,high,size,dtype]) 生成随机整数,包含low不包含high,如果high不指定则从[0,low]中生成数字
t7=np.random.randint(3)
print(t7)
t8=np.random.randint(1,10)
print(t8)
t9=np.random.randint(10,30,size=5)
print(t9)
t10=np.random.randint(10,30,size=(2,3,4))
print(t10)

numpy学习_第15张图片
numpy学习_第16张图片

# random([size]) 生成[0,1)的随机数
t11=np.random.random(5)
print(t11)
t12=np.random.random(size=(3,4))
print(t12)
t13=np.random.random(size=(2,3,4))
print(t13)

# choice(a[,size,replace,p]) a是一维数组,从里面生成随机结果
# 如果是数字从range中生成
t14=np.random.choice(5,3)
print(t14)
t15=np.random.choice(5,(2,3))
print(t15)
# 如果是数组从数组抽取
t16=np.random.choice([2,3,4,5,6,7],3)
print(t16)
t17=np.random.choice([2,3,4,5,6,7],(2,3))
print(t17)

numpy学习_第17张图片

#shuffle(x) 将一个数组随机排列
a = np.arange(10)
b=np.random.shuffle(a)
print(a)
#如果数据是多维的只会在第一维打散
c=np.arange(20).reshape(4,5)
d=np.random.shuffle(c)
print(c)

#permutation(x) 把一个数组进行随机排列,或者数字的全排列
print(np.random.permutation(10))
x=np.arange(9).reshape(3,3)
y=np.random.permutation(x)
print(y)

# normal([loc,scale,size]) 按照平均值loc和方差scale生成高斯分布的数字
print(np.random.normal(1,10,10))
print(np.random.normal(1,10,(3,4)))

# uniform([loc,high,size]) 在[low,high)之间生成均匀分布的数字
print(np.random.uniform(1,10,10))
print(np.random.uniform(1,10,(3,4)))

#案例:画随机噪声曲线
import matplotlib.pyplot as plt
x=np.linspace(-10,10,100)
y=np.sin(x)*5
plt.plot(x,y)
z=y+np.random.randn(len(x))
plt.plot(x,z)
plt.show()

numpy学习_第18张图片
numpy学习_第19张图片

6.数据统计函数

numpy学习_第20张图片

import numpy as np

arr = np.arange(12).reshape(3,4)
print(arr)
a1=np.sum(arr)
print(a1)
a2=np.prod(arr)
print(a2)
a3=np.cumsum(arr)
print(a3)
a4=np.cumprod(arr)
print(a4)
a5=np.min(arr)
print(a5)
a6=np.max(arr)
print(a6)
a7=np.percentile(arr,[25,50,75])
print(a7)
a8=np.quantile(arr,[0.25,0.5,0.75])
print(a8)
a9=np.median(arr)
print(a9)
a10=np.mean(arr)  #平均值
print(a10)
a11=np.std(arr)   #标准差
print(a11)
a12=np.var(arr)   #方差
print(a12)

numpy学习_第21张图片

# numpy的axis参数用途
# axis=0代表行,把行消解掉/跨行计算
# axis=1代表列,把列消解掉/跨列计算
a13=arr.sum(axis=0)
print(a13)
a14=arr.sum(axis=1)
print(a14)
a15=arr.cumsum(axis=0)
print(a15)
a16=arr.cumsum(axis=1)
print(a16)

# 标准化操作
# 计算每列的均值
mean=np.mean(arr,axis=0)
print(mean)
# 计算每列的标准差
std=np.std(arr,axis=0)
print(std)
# 计算分子,注意每行都会分别减去均值,这叫做numpy的广播
fenzi=arr-mean
result=fenzi/std
print(result)

numpy学习_第22张图片

7.计算满足条件元素个数

import numpy as np

arr = np.random.randint(1, 10000, size=int(1e8))
print(arr[:10])
print(arr.size)

# 使用python语法实现
pyarr = list(arr)
r1 = len([x for x in pyarr if x > 5000])
print(r1)

# 使用numpy实现
print(arr[arr > 5000].size)
r2 = (arr > 5000)[:10]

numpy学习_第23张图片

8.给数组增加维度

import numpy as np

'''
三种方法:
1.np.newaxis:关键字,使用索引的语法给数组增加维度
2.np.expand_dims(arr,axis):方法,给arr在axis位置增加维度
3.np.reshape(a,newshape):方法,为一个维度设置为1完成升维
'''

arr = np.arange(5)
print(arr)
print(arr.shape)
# np.newaxis
a1 = arr[np.newaxis, :]
print(a1)
print(a1.shape)
a2 = arr[:, np.newaxis]
print(a2)
print(a2.shape)

numpy学习_第24张图片

# np.expand_dims
a3 = np.expand_dims(arr, axis=0)
print(a3)
print(a3.shape)
a4 = np.expand_dims(arr, axis=1)
print(a4)
print(a4.shape)

# np.reshape
a5 = np.reshape(arr, (1, 5))
a6 = np.reshape(arr, (1, -1))
print(a6)
print(a6.shape)
a7 = np.reshape(arr, (-1, 1))
print(a7)
print(a7.shape)

numpy学习_第25张图片

9.数据合并操作

import numpy as np

'''
实现数据合并的操作:
np.concatenate(array_list,axis=0/1):沿着指定axis进行数组合并
np.vstack或者np.row_stack(array_list):垂直vertically,按行数据合并
np.hstack或者np.column_stack(array_list):水平horizontally,按列数据合并
'''
a=np.arange(6).reshape(2,3)
b=np.random.randint(10,20,size=(4,3))

print(a)
print(b)

c=np.concatenate([a,b])
print(c)
d=np.vstack([a,b])
print(d)
e=np.row_stack([a,b])
print(e)

f=np.random.randint(10,20,size=(2,2))
print(f)
np.concatenate([a,f],axis=1)
np.hstack([a,f])
np.column_stack([a,f])

numpy学习_第26张图片
numpy学习_第27张图片

你可能感兴趣的:(python,python,numpy)