numpy基本操作(一)

numpy是一个多维数组对象,这个对象包装了很多数学函数,如何生成一个ndarray.

从已有的数据中创建数组

1、将列表转换为ndarray

list1=[1,2,3,4,5]
nd1=np.array(list1)

2、将嵌套列表转换成多维的ndarray

import numpy as np
#创建array
array=np.array([[1,2,3],[2,3,4]])
print(array)
#array的维数
print('number of dim',array.ndim)
#array的规格是几乘几
print('shape',array.shape)
#array里面有几个元素
print('size',array.size)
#创建array,定义类型
a=np.array([2,3,4],dtype=np.float)
print(a.dtype)
b=np.array([[1,2,3],[2,3,4]])
print(b)
#创建全零array
c=np.zeros((3,4))
print(c)
#创建全为1 的array
d=np.ones((3,4))
print(d)
#创建空array
e=np.empty((3,4))
print(e)
#创建array,从10 到20 ,步长为2
f=np.arange(10,20,2)
print(f)
#创建array,改变其规格为3x4
g=np.arange(12).reshape((3,4))
print(g)
#将1-10分割成五份
h=np.linspace(1,10,5)
print(h)

a=np.array([10,20,30,40])
b=np.arange(4)
print(a,b)
#逐个元素相减
c=a-b
print(c)
#每个元素的平方
c=b**2
print(c)
#每个元素求sin值,乘以10
c=10*np.sin(a)
print(c)
#找出小于3的元素的索引
print(b<3)

print(b==3)

a=np.array([[1,1],[0,1]])
b=b.reshape((2,2))
print(a)
print(b)
#矩阵相应元素之间相乘
c=a*b
#相当于数学中的矩阵相乘
c_dot=np.dot(a,b)
print(c)
print(c_dot)

a=np.random.random((2,4))
print(a)
#找出序列中的最大值,最小值,求和
print(np.sum(a))
print(np.min(a))
print(np.max(a))
#对每一行或者每一列进行操作
print(np.sum(a,axis=1))
print(np.min(a,axis=0))
print(np.max(a,axis=1))

利用random模块生成数组

np.random.random 生成0-1之间的随机数
np.random.uniform 生成均匀分布的随机数
np.random.randn 生成标准正态随机数
np.random.randint 生成随机的整数
np.random.normal 生成正态分布(可指定均值核方差)
np.random.shuffle 数据打乱顺序
np.random.sample 生成随机的浮点数

import numpy as np
np.random.seed(1)
nd1=np.random.randn(2,3)
print(nd1)
np.random.shuffle(nd1)
print('随机打乱后的顺序:',nd1)

如何创建特定形状的多维数组

np.zeros((3,4))
np.ones((3,4))
np.empty((3,4))
np.zeros_like(narray)#生成的数组大小和ndarray一样
np.ones_like(ndarray)
np.eye(5)#创建一个55的矩阵,对角线元素全为1,其余全为0
np.full((3,4),777)#创建3
4的矩阵,并且元素全为777

nd2=np.zeros((3,4))
print(nd2)

nd3=np.zeros_like(nd2)
print(nd3)

nd4=np.ones_like(nd3)
print(nd4)
print(np.diag([1,2,3]))

利用arange,linspace

arange(start,end,dtype) #[start,end)
linspace(start,end,dtype) #[start,end]

print(np.arange(1,5,0.5))
print(np.arange(10))
print(np.arange(9,-1,-1))

print(np.linspace(0.1,1,10))

获取元素

1、获取指定位置的数据
2、获取一段数据
3、获取固定间隔的数据
4、倒序输出
5、截取一个多维数组区域内的数据
6、截取一个多维数据中,数值在一个值域之内的数据
7、获取多维数组中指定的行
8、获取多维数组中,指定的列

nd5=np.arange(10)
print(nd5)

print(nd5[3])

print(nd5[0:5])

print(nd5[0:6:2])

print(nd5[::-1])

nd6=np.arange(25).reshape((5,5))
print(nd6)

print(nd6[0:4,0:3])

print(nd6[(nd6>3)&(nd6<10)])

print(nd6[2:4,:])

print(nd6[:,1:4])

numpy算术运算

1、对应元素相乘
2、点积运算

a=np.array([[1,2],[-1,4]])
b=np.array([[2,0],[3,4]])
print(a)
print(b)
print(a*b)

print(np.multiply(a,b))#这里也是相应元素相乘

print(a*2)#各个元素都乘以2,广播机制

def softmax(x):
    return np.exp(x)/np.sum(np.exp(x))
def relu(x):
    return np.maximum(0,x)

print(relu(a))
print(softmax(a))

print(np.dot(a,b))#这个是点积

数组变形

1、更改数组的形状
reshape #改变向量的维度

arr=np.arange(10).reshape((2,5))
print(arr)

resize

arr=np.arange(10)#要注意resize是直接对arr进行操作,而reshape是不在原数据上进行修改的,也即不修改向量本身。
arr.resize((2,5))
print(arr)

转置运算

arr=np.arange(10).reshape(2,5)
print(arr)
print(arr.T)

矩阵的展平操作

flatten

a=np.arange(12).reshape((3,4))
print(a)
print(a.flatten())

ravel 是按列进行展平

print(a.ravel('F'))

降维

squeeze

arr=np.arange(9).reshape(3,1,3)
print(arr)
print(arr.squeeze())

transpose

arr=np.arange(24).reshape(2,3,4)
print(arr.shape)
print(arr.transpose(1,2,0))#3 4 2#只对副本进行变换
print(arr.shape)

合并数组

append

1、一维数组拼接

a=np.arange(3).reshape(1,-1)
b=np.arange(3).reshape(1,-1)
print(np.append(a,b))

2、多维数组拼接

a=np.arange(4).reshape((2,2))
b=np.arange(4).reshape((2,2))
print(np.append(a,b,axis=0))
print(np.append(a,b,axis=1))

** concatenate**按指定轴连接数组或者矩阵

print(np.concatenate((a,b),axis=0))

stack

print(np.stack((a,b),axis=1))

批处理

data_train=np.random.randn(10000,2,3)
print(data_train.shape)

np.random.shuffle(data_train)

batch_size=100#每次处理100个数据


for i in range(0,len(data_train),batch_size):
    x_batch_sum=np.sum(data_train[i:i+batch_size])
    print("第{}批次,该批次的数据之和:{}".format(i,x_batch_sum))

numpy提供的常用函数

sqrt
sin,cos
abs
dot
log,log10,log2
exp
cumsum,sumproduct #累计求和
sum
meann
median
std
corrcoef

tensor(神经网络界的numpy)

创建tensor

a=torch.Tensor([1,2,3,4,5])
print(a)

b=torch.Tensor(2,3)  #默认初始化为0
print(b)

c=torch.Tensor([[1,2,3],[4,5,6]])
print(c)

print(c.size())

d=torch.Tensor(c.shape)
print(d)

修改Tensor

x=torch.randn(2,3)
print(x.dim())
x=x.reshape(3,2)
print(x)
y=x.view(3,2)  #view操作的是同一片内存
y[0][0]=500
print(y)
print(x)

x=x.view(-1)
print(x)

torch.manual_seed(100)

x=torch.randn(2,3)
print(x[0,:])

你可能感兴趣的:(机器学习,Pytorch从入门到实战,python,numpy,机器学习)