import numpy as np //np是用来指代numpy的 可以用别的 也可以不输入 as np
numpy.array(object,dtype=None,copy=True,order='K',subok=False,ndmin=0)
//object 接受array_like。表示想要创建的数组。无默认。
//dtype 接受data-type。表示数组所需数据类型,如果未给定,则选择保存对象所需的最小类型。默认为None。
//ndmin 接受int。指定生成数组应该具有的最小维数。默认为None。
例
arr1 = np.array ([0.3,0.5,4.2])
arr2 = np.array([[3,4,5],[4,2,1]])
print(arr1)
print(arr2)
print(type(arr1))
ndim //返回int。表示数组的维度
shape //返回tuple。表示数组的尺寸,对于n行m列的矩阵,形状为(n,m)
size //返回int。表示数组的元素总数,等于数组形状的乘积
dtype //返回data-type。描述数组中元素的类型
itemsize //返回int。表示数组的每个元素的大小(以字节为单位)。
例
print(arr1.shape)
print(arr1.ndim)
print(arr1.dtype)
print(arr2.shape)
print(arr2.ndim)
print(arr2.dtype)
arr3=np.arange(0,10) //创建一个从0到10的数组 默认间距为1 遵循左闭右开的原则,即左边是闭区间,右边是开区间 所以只能取到0至9
arr4=np.arange(10) //同上
arr5=np.arange(0,1,0.1) //创建一个从0到1的数组 间距是0.1 因为左闭右开 只能取到0至0.9
arr6=np.linspace(0,1,11) //从0取到1 总共11个数字
arr7=np.zeros([3,4]) //生成一个三行四列的全0数组 2维数组
arr7=np.zeros([3,4,5]) //生成一个三行四列五层的全0数组 3维数组
arr7=np.zeros([3]) //生成一个三个元素的全0数组 1维数组
#生成随机数
print(np.random.random(10)) #生成10个无约束的随机数
print(np.random.rand(3,4)) #生成0到1之间均匀分布的随机数 并且三行四列
print(np.random.randn(2,2,2)) #生成指定shape的正态分布的随机数,两行两列两层
[0.26341543 0.1852021 0.38837372 0.30196201 0.07496407 0.77995341
0.66488621 0.68118847 0.49476681 0.1190497 ]
[[0.05325184 0.88976184 0.03056858 0.5052506 ]
[0.8112221 0.98758908 0.5735309 0.78384449]
[0.75242482 0.63576694 0.08517221 0.06276684]]
[[[ 0.39608223 0.16737085]
[-0.21105034 -0.72246626]]
[[-1.790807 0.68775253]
[-0.46964647 0.99793275]]]
#数组的索引
arr1 = np.array([0.3,0.78,0.24,5,3.2])
print(arr1)
print(arr1[0]) #一维数组的单个元素
print(arr1[-5]) #倒序索引
print(arr1[1:3])#切片查询 左闭右开区间 取出来的类型是列表
print(arr1[-4:-2]) #倒序
res1 = arr1[3]
res2 = arr1[3:4]
print(res1,res1.shape)
print(res2,res2.shape) #切片查询会夹带原本的数据结构 因此返回的值是列表 (1,)代表是一维数组
[0.3 0.78 0.24 5. 3.2 ]
0.3
0.3
[0.78 0.24]
[0.78 0.24]
5.0 ()
[5.] (1,)
#逻辑型索引
arr2 = np.array([2.3,1.8,4.5])
print(arr2)
print(arr2[[False,False,True]]) #设置元素索引 因为前两个元素的索引值为False,所以就不会被取出来
index = arr2 > 2 #数组内的每个元素都和2比较
print(index) #查看比较结果
print(arr2[index])
#多维数组的索引
arr3 = np.arange(1,13).reshape([3,4]) #生成12个数 按三行四列排序
print(arr3)
print(arr3[2,3]) #取出12 确定目标元素的行列来取出元素
print(arr3[2,0:]) #取出第2行的数据
print(arr3[:,0]) #取出第0行的数据
print(arr3[1:3,1:3])
print(arr3[2:,:]) #取出第2行的数据 且返回的数据形态是二维数组
print(arr3[arr3[:,0]>4,:]) #取出所有大于4的数据
#修改数组中的元素
arr3 = np.arange(1,13).reshape([3,4])
print(arr3)
arr3[0,0] = 15 #修改数组元素
print(arr3)
#求解距离矩阵
n = 3 #样本个数
x = np.linspace(1,100,n) #样本的横坐标
y = np.linspace(1,100,n) #样本的纵坐标
dist = np.zeros([n,n]) #初始距离矩阵
for i in range(n):
for j in range(n):
dist[i,j] = np.sqrt((x[i]-x[j])**2+(y[i]-y[j])**2)
print(x)
print(y)
print(dist)
#变换数组shape
arr4 = np.arange(1,13)
print(arr4)
print(arr4.reshape([3,4]))
arr5 = arr4.reshape([3,4])
print(arr5)
print(arr5.ravel()) #数组展平
arr5.flatten('F') #添加 F 按列展平 ,不添加 按行展平
arr6 = arr4.reshape([3,4])
print(arr6)
print(np.vstack([arr5,arr6])) #把两个数组纵向向拼接
print(np.hstack([arr5,arr6])) #把两个数组横向拼接
#Numpy通用函数介绍
arr1 = np.array([0.2,0.4,0.6])
arr2 = np.array([0.2,0.6,0.78])
list1 = [0.2,0.4,0.6]
print(arr1+1) #所有元素加1
print(arr1*2) #所有元素乘以二
print(list1 * 2) #注意返回值
print(arr1 + arr2) #对应元素相加
print(arr1 * arr2) #对应元素相乘
print(np.any(arr1==0.2)) # 逻辑 or
print(np.all(arr1==0.2)) # 逻辑 and
#通用函数的广播机制
arr3 = np.arange(1,13).reshape([4,3])
arr4 = np.array([1,2,3])
arr5 = np.array([[1],[2],[3],[4]])
print(arr3)
print(arr4)
print(arr5)
print(arr3 + arr4)
print(arr3 + arr5)
## 利用Numpy进行统计分析
arr1 = np.arange(1,13).reshape([4,3])
arr2 = np.arange(1,13).reshape([3,4])
print(arr1)
print(arr2)
np.save('tmp/arrq.npy',arr1) #保存到相应位置
arr1_load =np.load('tmp/arrq.npy') #读取数据
print(arr1_load)
np.savez('tmp/arr1&2.npz',arr1,arr2) #保存多个数组数据
arr1_2_load=np.load('tmp/arr1&2.npz')
print(arr1_2_load) #这样只能查看到内存地址
print(arr1_2_load.files) #查看数据文件中有哪些数组对象
print(arr1_2_load['arr_0'])
#Numpy读写txt文件
np.savetxt('tmp/arr1.txt',arr1,delimiter=',') #保存数据 ,设置用逗号间隔数据
np.loadtxt('tmp/arr1.txt',delimiter=',') #读取数据
#使用数组进行简单统计分析
arr3 = np.random.randint(1,10,(3,4))
print(arr3)
arr3.sort(axis=0) #对数组元素按大小进行排序
print(arr3)
arr3.argsort(axis=0) #返回排序后的下标
np.tile(arr3,2) #对数组进行复制操作
np.repeat(arr3,2,axis=1) #对数组元素一个一个复制
print(arr3.mean()) #统计数组所有元素的均值
print(arr3.mean(axis=0)) #按列统计数组的均值
print(arr3.max(axis=0)) #按列统计数组的最大值
arr3.argmax(axis=0) #找出每列元素最大值的位置