Numpy常用用法

生成10个2的幂次方倍的数:

np.logspace(0,9,base = 2):[1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]

获取当前时间:time.clock()

生成随机数的种子:np.random.seed(0)

 

import numpy as np
#生成2行三列的随机数
data = np.random.rand(2,3)
Data = np.random.randn(2,3)#满足标准正态分布的随机数
print(data,数据)

NUMP的数组创建函数:

#查看形状和数据类型、类型以及维度
print(data.shape,data.dtype,type(data),data.ndim)
#将data进行转置
print(data.T)
#计算data的内积
print(np.dot(data,data.T))
#生成一个含有10个元素的全零向量
print(np.zeros(10))
#生成3行6列的全一矩阵
print(np.ones((3,6)))
print(np.ones([3,6]))
#生成2*3*6的空矩阵
print(np.empty((2,3,6)))
#将数据强制转化成ndarray,并将默认的float64转换为int
print(np.array(range(10),dtype=int).dtype)
#生成一个形状像data的全一矩阵
print(np.ones_like(data))
#生成全部以9填满的3行3列的矩阵
print(np.full((3,3),9))
#生成形状像data的全部以8填满的矩阵
print(np.full_like(data,8))
#生成一个5阶的单位阵
print(np.eye(5))
print(np.identity(5))
#numpy中的加减乘除都是对应元素的运算
data = np.array([[1,2,3],[4,5,6]])
#做一下data的点积
print((data*data)**0.5)
#numpy的广播机制:
#如果满足以下规则,可以进行广播:
# ndim较小的数组会在前面追加一个长度为 1 的维度。
# 输出数组的每个维度的大小是输入数组该维度大小的最大值。
# 如果输入在每个维度中的大小与输出大小匹配,或其值正好为 1,则可以在计算中使用该输入。
# 如果输入的某个维度大小为 1,则该维度中的第一个数据元素将用于该维度的所有计算。
a=np.array([[[10,10,10],[20,20,20],[30,30,30]],[[10,10,10],[20,20,20],[30,30,30]]])
b=np.array([[1,2,3],[1,2,3],[1,2,3]])
c=np.array([1,2,3])
print(a+b+c)
#因此广播实际上是先不管最高维的,只拿最高维的最里边维度的数据,
# 它的维度必须与另一个数组的维度相同,然后那个数组将自己扩散成与
# 高维相同的形状再来运算,就是将自己的元素复制(自我复制)使得与对方形状相同,就是要与高维度的其中一个维度匹配上

#numpy的切片
arr=np.arange(10)
arr_slice = arr[5:8]
print(arr,arr_slice)
arr_slice[:] = 64
print(arr)
#为什么会出现这种结果,因为arr_slice它只是arr的一部分,在进行切片的
# 时候并没有再来开辟内存,这是为了方便修改很多数据的时候修改其中的一部分数据,
# 如果是想要单独开辟内存空间就需要以下操作,在后面加一个copy()函数
# arr=np.arange(10)
# arr_slice = arr[5:8].copy()
# print(arr,arr_slice)
# arr_slice[:] = 64
# print(arr)
#在索引中,[][]和[,]是等价的
numpy的函数:

#numpy的条件逻辑运算
x=np.array([1.1, 1.2, 1.3, 1.4, 1.5])
y=np.array([2.1, 2.2, 2.3, 2.4, 2.5])
cond=np.array([True, False, True, True, False])
print(np.where(cond,x,y))#当cond中的条件为True的时候选择x的值否则选择y的值,它的用法是先列出条件,满足条件该怎么样否则怎么样

#numpy的数学和统计方法
arr = np.random.randn(5, 4)#生成5*4的满足正态分布的矩阵
print(arr)
print(np.mean(arr,0))#求第0轴的均值
print(np.sum(arr,1))#第一轴的和
#cumsum和cumprod之类的方法则不聚合,而是产生一个由中间结果组成的数组
arr = np.array([1, 2, 3, 4, 5, 6, 7])
print(arr.cumprod())#求累乘之积
arr = np.array([[0, 2, 1], [4, 3, 5], [8, 7, 6]])
print(arr.cumsum(0))
print(arr.argmax())#求arr最大元素的索引
print(np.sort(arr,1))#沿着1轴进行排序

#numpy的集合运算
#numpy中的唯一化
names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
print(np.unique(names))

#numpy文件操作
# arr = np.arange(10)
# np.save('some_array', arr)#默认保存为.npy文件
# print(np.load('some_array.npy'))#读取文件
# np.savez('array_archive.npz', a=arr, b=arr)#保存多个文件

# numpy.linalg中有一组标准的矩阵分解运算以及诸如求逆和行列式之类的东西。
# 它们跟MATLAB和R等语言所使用的是相同的行业标准线性代数库,如BLAS、LAPACK、Intel MKL
# (Math Kernel Library,可能有,取决于你的NumPy版本)等:
from numpy.linalg import inv, qr
X = np.random.randn(5, 5)
mat = X.T.dot(X)
print(inv(mat))#求矩阵的逆
print(mat.dot(inv(mat)))
q, r = qr(mat)#对矩阵进行QR分解
print(r)

Numpy的随机数函数:

猜你喜欢

转载自blog.csdn.net/weixin_38241876/article/details/84953690