numpy基本语法
numpy和pytorch基本语法差不多
导入
import numpy as np
数据生成
手动生成
a=np.array([[1,2,3],[4,5,6]])
a=np.array[]
自动生成
np.ones((3,4))
np.zeros((2,3)):0
np.empty((3,2)):无限接近0
np.random.random((3,2)) 生成3行2列从0到1的随机数
np.random.normal(size=(3,2))#生成3行2列符合标准正态分布的随机数
np.random.randint(0,10,size=(3,2))#生成3行2列从0到10的随机整数
np.arange(1,10)
np.linspace(-1,1,100)#从-1到1生成100个点
np.eye(9)#生成九阶矩阵,一个对角线全是
np.random.choice(g)#g中选一个数据
np.random.shuffle(g)#打乱g排序
查询
类型:a.dtype
形状
变形:a.reshape()
数组形状:a.shape 没有a.size()
维度:a.ndim
大小:a.size #长度
变一维,推平:a.flatten(),a.ravel()
加行维度:arr1_1 = arr1[np.newaxis,:]
加列维度:arr1_2 = arr1[:,np.newaxis]
至少2维:np.atleast_2d(arr1) #一维的变两维,两维及以上没有变化
arr1_1 = arr1[np.newaxis,:]
print(arr1_1)
print(arr1_1.shape)
[[1 2 3]]
(1, 3)
arr1_2 = arr1[:,np.newaxis]
print(arr1_2)
print(arr1_2.shape)
[[1]
[2]
[3]]
(3, 1)
基本运算
-
* a.dot(),np.matmul(a,c)行乘列
//
%
**
>:
arr3 = arr1 > 3:
[[False False False]
[ True True True]]
函数
np.sum(sample1)#求和
np.min(sample1)#求最小值
np.max(sample1)#求最大值
np.sum(sample1,axis=0)#对列求和
np.sum(sample1,axis=1)#对行求和
np.sum(sample1,axis=0)#对列求和
sample1.argmin()#索引
sample1.mean()#求平均值
a.median()#求中位数
a.std()#求标准差
a.sqrt()#开方
转置与逆矩阵
转置
一位数组不能转置
a.T
a.transpose()
逆矩阵
np.linalg.inv(a)
排序
np.sort(sample)#排序
sample.argsort()
np.clip(sample,2,7)#小于2就变成2,大于7就变为7
索引
和pytorch差不多
数组合并
垂直合并
arr3 = np.vstack((arr1,arr2))
arr = np.concatenate((arr3,arrv),axis=0)#默认是水平合并
水平 合并
arr4 = np.hstack((arr1,arr2))
arr = np.concatenate((arr3,arrv),axis=1)
分割
垂直分割
arr4,arr5,arr6 = np.split(arr1,3,axis=0)#垂直方向分割,分成3份
arrv1,arrv2,arrv3 = np.vsplit(arr1,3)#垂直分割
水平分割
arr2,arr3 = np.split(arr1,2,axis=1)#水平方向分割,分成2份
arr2,arr3,arr4 = np.split(arr1,3,axis=1)#水平方向分割,分成3份#会报错因为不均等
用这个
arr7,arr8,arr9 = np.array_split(arr1,3,axis=1)#水平方向分割,分成3份,不等分割
arrh1,arrh2 = np.hsplit(arr1,2)#水平分割
深拷贝和浅拷贝
浅拷贝
arr1 = np.array([1,2,3])
arr2 = arr1#arr1,arr2共享一块内存,浅拷贝
arr2[0] = 5
print(arr1)
print(arr2)
[5 2 3]
[5 2 3]
深拷贝
arr3 = arr1.copy()#深拷贝,创建了新内存
arr3[0] = 10s
print(arr1)
print(arr3)
[5 2 3]
[10 2 3]