我是靠谱客的博主 舒适电脑,最近开发中收集的这篇文章主要介绍玩转numpy,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

numpy - 通用

1. 忽略所有numpy警告

defaults = np.seterr(all="ignore")

numpy - 数组

1. 创建数组

# 创建一个10*10的0数组
Z = np.zeros((10,10))
print(Z)

# 长度为10的0数组,第4个值为1
Z = np.zeros(10)
Z[3] = 1

# 创建一个从0到8的3*3数组
Z = np.arange(0,9).reshape(3,3)

# 创建一个从0到49的数组
# np.arange 包含左边不包含右边
Z = np.arange(0,50)

# 创建一个5*5的矩阵,每一行值为1~4
Z = np.zeros((5,5))
Z += np.arange(5)

# 创建一个长度为10的数组,值为0~1之间,不包含首尾
Z = np.linspace(0,1,11,endpoint=False)[1:]

# 创建具有x和y坐标的结构化数组,它们覆盖[0,1] x [0,1]区域
Z = np.zeros((5,5), [('x',float),('y',float)])
Z['x'], Z['y'] = np.meshgrid(np.linspace(0,1,5),np.linspace(0,1,5))

2. 数组运算

# 四舍五入
Z = np.random.uniform(-10,+10,10)
print (np.copysign(np.ceil(np.abs(Z)), Z))

# 创建一个长度为10的数组,并做排序操作
Z = np.random.random(10)
Z.sort()

# 对一个数组进行相加操作,并且速度快于np.sum
Z = np.arange(10)
np.add.reduce(Z)

3. 反转数组

Z = np.arange(0,50)
Z = [::-1]

# 第3~8个元素取反
Z = np.arange(11)
Z[(3 < Z) & (Z <= 8)] *= -1

4. 找到数组中的非零元素的索引

Z = [1,2,4,-1,0,3,5]
nz = np.nonzero(Z)
print(nz)

5. 给一个已经存在的数组添加边(填充0)

Z = np.ones((5,5))
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0)

6. 多个数组操作

# 找出两个数组的共同值
Z1 = np.random.randint(0,10,10)
Z2 = np.random.randint(0,10,10)
print(np.intersect1d(Z1,Z2))

# 判断随机数组A和B是否相等
A = np.random.randint(0,2,5)
B = np.random.randint(0,2,5)
# 比较两个array是不是每一元素都相等,默认在1e-05的误差范围内
equal = np.allclose(A,B)
print(equal)
# 判断是否完全相等,不允许误差存在
equal = np.array_equal(A,B)
print(equal)

7. 提取随机数列整数部分的五种方法

Z = np.random.uniform(0,10,10)

print (Z - Z%1)
print (np.floor(Z))
print (np.ceil(Z)-1)
print (Z.astype(int))
print (np.trunc(Z))

8. 使一个数组不变(只读)

Z = np.zeros(10)
Z.flags.writeable = False

9. 如何在数组中找到最接近给定值的值

Z = np.arange(100)
v = np.random.uniform(0,100)
index = (np.abs(Z-v)).argmin()
print(Z[index])

numpy - 矩阵

1. 创建矩阵

# 3*3的对角
Z = np.eye(3)

# 3*3*3的随机矩阵
Z = np.random.random((3,3,3))
Zmin,Zmax,Zmean = Z.min(),Z.max(),Z.mean()  # Z的最小值/最大值/均值
print(Zmin,Zmax,Zmean)

# 创建一个四边为1,中间为0的二维数组
Z = np.ones((10,10))
Z[1:-1,1:-1] = 0

# 创建一个5*5矩阵,对角线下方值为1,2,3,4
Z = np.diag(1 + np.arange(4),k = -1)

#创建一个8*8矩阵,并用棋盘图案填充
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1

# 使用tile函数创建8*8的棋盘矩阵
Z = np.tile(np.array([[0,1],[1,0]]), (4,4))

# 创建一个长度为10的随机矩阵,并将最大值替换为0
Z = np.random.random(10)
Z[Z.argmax()] = 0

# 给定两个数组X和Y,构造柯西矩阵C(Cij = 1 /(xi-yj))
X = np.arange(8)
Y = X + 0.5
C = 1.0 / np.subtract.outer(X, Y)
print(np.linalg.det(C))

2. 矩阵运算

# 矩阵相乘
Z = np.dot(np.ones((5,3)), np.ones((3,2)))
print(Z)

# 求解
Z = np.ones((5,3)) @ np.ones((3,2))

# 标准化处理
Z = np.random.random((5,5))
Z = (Z - np.mean (Z)) / (np.std (Z))
print(Z)

# 给定表示笛卡尔坐标的一个10*2的随机矩阵,将其转换为极坐标
Z = np.random.random((10,2))
X,Y = Z[:,0], Z[:,1]
R = np.sqrt(X**2+Y**2)
T = np.arctan2(Y,X)
print(R)
print(T)

3. 给定一个567的三维矩阵,求100个元素的索引

print(np.unravel_index(99,(5,6,7)))

numpy - 计算类

1. 计算((A+B)*(-A/2))

A = np.ones(3)*1
B = np.ones(3)*2
C = np.ones(3)*3
np.add(A,B,out=B)
np.divide(A,2,out=A)
np.negative(A,out=A)
np.multiply(A,B,out=A)

numpy - 时间类操作

1. 获取特定日期

# 获取昨天、今天、明天的日期
yesterday = np.datetime64('today', 'D') - np.timedelta64(1, 'D')
today     = np.datetime64('today', 'D')
tomorrow  = np.datetime64('today', 'D') + np.timedelta64(1, 'D')

# 获得2019年7月对应的所有日期
Z = np.arange('2019-07', '2019-08', dtype='datetime64[D]')

(未完待续…)

最后

以上就是舒适电脑为你收集整理的玩转numpy的全部内容,希望文章能够帮你解决玩转numpy所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(50)

评论列表共有 0 条评论

立即
投稿
返回
顶部