玩转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]')

(未完待续…)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值