目录
4.生成随机数
5.索引与切片
布尔索引
6.数组运算
数组之间的大小比较
7.数组的组合
一、使用函数concatenate
二、使用函数hstack()和vstack()
8.数组的分隔
使用hsplit/csplit函数将数组分隔
使用split函数将数组切割
首先,导入numpy包
import numpy as np
生成20个数值范围在0到1之间的数据
arr1=np.random.random(20)
print(arr1)
numpy.random模块可以高效地生成多种概率分布下完整样本值数组:
normal() |
从正太(高斯)分布中抽取样本 |
randn() | 从均值0方差1的正态分布中抽取样本 |
random() | 从0-1之间抽取随机数 |
seed() | 向随机数生成器传递随机状态种子,当随机状态种子相同时,随机数相同 |
rand() | 生成数值范围在0到1之间的数据 |
arr1=np.random.rand(100)
print(arr1)
此时我们可以查看到具体的数值
接下来转成更加直观的直方图,通过下面的图,我们可以看出,出现在0到1之间的数据出现的概率是随机且大致相等的。
import matplotlib.pyplot as plt
arr1=np.random.rand(10000)
fig=plt.figure()
plt.hist(arr1,bins=50)
plt.show()
查看正态分布
import matplotlib.pyplot as plt
arr2=np.random.randn(10000)
fig=plt.figure()
plt.hist(arr2,bins=50)
plt.show()
一维数组的切片、索引与Python原生的切片类似
arr1=np.arange(10)
print(arr1)
print(arr1[5])
print(arr1[3:5])
对数组切片的影响都会反映到数组本身
arr1=np.arange(10)
print(arr1)
arr1[3:7]=[1,2,1,2]
print(arr1)
如果需要数组切片的副本,我们需要使用copy的方法,就不会对原数组产生影响。
arr1=np.arange(10)
print(arr1)
arr2=arr1[3:5].copy()
print(arr1)
print(arr2)
arr2[0:2]=[5,6]
print(arr1)
print(arr2)
这里我们生成一个[1,0,0,0,1]的布尔值类型的数组arr1,然后生成一个[0,1,2,3,4]的arr2数组,当我们arr2[arr1]后,arr1中1的位置将会被打印出来。
import numpy as np
arr1=np.array([1,0,0,0,1],dtype=bool)
arr2=np.arange(5)
print(arr2[arr1])
首先我们创建一个二维数组,然后进行测试,我们可以发现数组的加减乘除等运算会对数组中的每一个元素生效。
arr2=np.array([[1,2,3,4],[5,6,7,8]])
print(arr2)
print(arr2*2)
print(arr2+5)
print(arr2/5)
print(arr2**3)
看下列的代码,会打印出来一个布尔类型的数组,其中arr2大于arr3的位置为true其余位置全部都是false。
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3=np.array([[9,8,7,6],[214,4,14,4]])
print(arr2>arr3)
有的时候,我们需要将两个数组拼接起来,这里我们提供以下两种方法。
axis=1时,将arr2和arr3两个数组横向拼接
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3=np.array([[9,8,7,6],[214,4,14,4]])
arr4=np.concatenate((arr2,arr3),axis=1)
print(arr4)
axis=0时,将arr2和arr3两个函数纵向拼接
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3=np.array([[9,8,7,6],[214,4,14,4]])
arr4=np.concatenate((arr2,arr3),axis=0)
print(arr4)
hstack为横向拼接,vstack为纵向拼接
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3=np.array([[9,8,7,6],[214,4,14,4]])
arr4=np.hstack((arr2,arr3))
print(arr4)
arr5=np.stack((arr2,arr3))
print(arr5)
将数组等分成左右两个数组。
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3,arr4=np.hsplit(arr2,2)
print(arr3)
print()
print(arr4)
将数组等分成上下两个数组
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3,arr4=np.vsplit(arr2,2)
print(arr3)
print()
print(arr4)
上下等分成两个数组
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3,arr4=np.split(arr2,2,axis=0)
print(arr3)
print()
print(arr4)
左右等分成两个数组
arr2=np.array([[1,2,3,4],[5,6,7,8]])
arr3,arr4=np.split(arr2,2,axis=1)
print(arr3)
print()
print(arr4)
左右不均匀切割
arr2=np.array([[1,2,3,4,6,7,8,9,0,0],[5,6,7,8,32,1,31,4,41,3]])
arr3,arr4=np.split(arr2,(2,),axis=1)
print(arr3)
print()
print(arr4)