1-numpy常用操作

本文详细介绍了如何安装和使用NumPy库,包括基本操作如创建数组、数据计算、矩阵操作、最大值处理、数组堆叠与复制,以及图像处理中的相关技巧。涵盖了numpy的安装方法、版本管理、数组创建和常见运算,适合NumPy初学者和进阶者参考。
摘要由CSDN通过智能技术生成

1.安装

# numpy直接使用pip进行安装,numpy版本更新较快也较容易和其他包版本冲突
pip install numpy 

2 基础信息

import numpy as np
print (np.__version__)
print(np.show_config())

2.1 创建np数据

Z = np.zeros(10) # 1维长度10
Z = np.zeros((10,10)) 
Z = np.arange(50)
Z = Z[::-1]
Z = np.arange(9).reshape(3,3) # 改变形状
Z = np.nonzero([1,2,0,0,4,0]) # 得到非零元素位置
Z = np.eye(3)
Z = np.diag(1+np.arange(4) # 创建对角阵
Z = np.random.random((3,3,3))
Z.min(), Z.max(),Z.mean() # 获得最大值、最小值、均值
Z = np.pad(Z, pad_width=1, mode='constant', constant_values=0) # 边界填充
Z = np.zeros((8,8),dtype=int)
Z[1::2,::2] = 1
Z[::2,1::2] = 1 # 棋盘格数组
Z = np.tile( np.array([[0,1],[1,0]]), (4,4)) # 棋盘格数组
np.transpose(x, (2, 0, 1)) #转换通道顺序

2.2 数组计算

Z1 = np.random.randint(0, 10, 10)
Z2 = np.random.randint(0, 10, 10)
print (np.intersect1d(Z1, Z2)) # 求公共元素
# 查看np信息
np.Inf  # 正无穷数
eval("3")  # 3 输出为3

print(test1.ndim)  # 2
print(test1.shape) #(2, 3)
print(test1.size)  # 6

# 指定形式 
np.array([1,2,3],dtype=np.float) # array([1., 2., 3.])

2.3 零一矩阵,空矩阵

np.zeros((3,4))
np.ones((3,4))
np.empty((3,4))

2.4生成范围数

## 在reshap成矩阵  np.linspace中6代表数量
np.arange(1,13,2).reshape((2,3))
np.linspace(1,11,6).reshape((2,3))

2.5 矩阵计算

# +-*类似
g = np.array([5, 6,7,8])
h= np.arange(4)
i = g*h #+-*方式相同,array([ 0,  6, 14, 24])
j = 10 * np.sin(h)
print(g<7) # [ True True False False]
#矩阵点乘
g = g.reshape((2,2))
h = h.reshape((2,2))
np.dot(g,h)

2.6 最大值、和、行方向的最大值

k = np.random.random((2,4)) # 两行四列1之内的随机数
print(np.max(k))         # 0.9727591906394822
print(np.sum(k))         # 2.918453689744127
print(np.max(k, axis=0)) # 同一列取最大值,[0.26896094 0.09978274 0.97275919 0.6045273 ]

2.7 最大值位置,均值中位数,行差,转置和排序

l = np.arange(2,14).reshape((3,4))
print(np.argmin(l)) # 0
print(np.argmax(l)) # 11
print(np.mean(l))   # 7.5
print(np.average(l))# 7.5
print(np.median(l)) # 中位数
print(np.cumsum(l)) # 前每个数叠加 [ 2  5  9 14 20 27 35 44 54 65 77 90]
print(np.diff(l))   # 行的相邻差 [[1 1 1] [1 1 1] [1 1 1]]
print(np.nonzero(l))# (array([0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2]), array([0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3])) 代表非零元素位置,前面是行的位置后面是列的位置
print(np.sort(l))   # 逐行排序
print(l.T)          # 转置 
print(np.transpose(l))# 转置可以指定维度间的变换
print(np.clip(l, 5,9)) # 截取中间的数将小于的数变成5大于的数变成9,中间不变

2.8 取值

print(l[0][1])
print(l[1,2])
print(l[1, 1:3])
for row in l: # 输出行
    print(row)
for column in l.T: # 输出行
    print(column)
print(l.flatten()) # 展平成一维数据,
for item in l.flat:# 去除里面的所有元素值
    print(item)

2.9 矩阵的堆叠

A = np.array([1,2,3])
B = np.array([2,3,4])
print(np.vstack((A,B))) # 行堆叠
A = np.array([1,2,3])[:, np.newaxis]  #[:,np.newaxis] (3, 1)
B = np.array([2,3,4])[:, np.newaxis]  #[np.newaxis,:] (1,,3)
print(np.hstack((A,B))) # 列方向堆叠
print(np.concatenate((A,B,A),axis = 1)) # 多个堆叠可指定行列

2.10矩阵的分割

print(np.split(l, 2,axis=1))       # 分割成两列
print(np.array_split(l, 3,axis=1)) # 不等分割
print(np.vsplit(l, 3))             # hsplit同理

2.11矩阵的复制

a = np.arange(4)
b = a
d = b        # 改变a,b,d 都会变
b = a.copy() # 此时a改变不会改变b
b.tolist()   # 将矩阵转成列表

 
plt.figure()
plt.plot(np.array(history)[:,0])
plt.plot(np.array(history)[:,1])
plt.show()

2.12 增加图像维度

image = np.expand_dims(image,axis=0)
np.transpose(x, (2, 0, 1)) #转换通道顺序

2.13 画出图像直线

# 通过hoghlines得到的直线数据集
for line in rec_path:
    rho = line[0]  # 第一个元素是距离rho
    theta = line[1]  # 第二个元素是角度theta
    print(rho, theta)
    if (theta < (np.pi / 4.)) or (theta > (3. * np.pi / 4.0)):  # 垂直直线
        pt1 = (int(rho / np.cos(theta)), 0)  # 该直线与第一行的交点
        # 该直线与最后一行的焦点
        pt2 = (int((rho - data.shape[0] * np.sin(theta)) / np.cos(theta)), data.shape[0])
        cv2.line(data, pt1, pt2, (255),5)  # 绘制一条白线
    else:  # 水平直线
        pt1 = (0, int(rho / np.sin(theta)))  # 该直线与第一列的交点
        # 该直线与最后一列的交点
        pt2 = (data.shape[1], int((rho - data.shape[1] * np.cos(theta)) / np.sin(theta)))
        cv2.line(data, pt1, pt2, (255), 5)  # 绘制一条直线

后续操作在实际使用过程中会逐渐更新。

参考资料

  1. numpy中文官网
  2. 程序员大本营numpy常用操作
  • 9
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值