提示:本文按照作者的个人见解完成,不代表观点的正确;如有侵权,请联系作者删除。
参考资料:
https://www.bilibili.com/video/BV1hx411d7jb?p=14
https://www.bilibili.com/video/BV1U7411x76j?p=2
array对象的背景:
array本身的属性:
创建array的方法:
array本身支持的大量操作和函数:
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)
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())
# 数组计算
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)
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)
# 使用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)
# 使用random生成随机数
t19 = np.random.randn()
print(t19)
t20=np.random.randn(3)
print(t20)
t21=np.random.randn(2,3,4)
print(t21)
三种索引方式:基础索引、神奇索引、布尔索引
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)
# 神奇索引
# 一维数组
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位置的元素
# 布尔索引
# 一维数组
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)
#组合查询
z=np.arange(10)
con=(z%2)==0|(z>7)
print(z[con])
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)
# 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)
#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()
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的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)
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]
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)
# 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)
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])