侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

python中numpy的矩阵、多维数组的用法

Python  /  管理员 发布于 7年前   296

1. 引言

最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的。目前为止,觉得就算法仿真研究而言,还是matlab用得特别舒服,可能是比较熟悉的缘故吧。matlab直接集成了很多算法工具箱,函数查询、调用、变量查询等非常方便,或许以后用久了python也会感觉很好用。与python相比,最喜欢的莫过于可以直接选中某段代码执行了,操作方便,python也可以实现,就是感觉不是很方便。

言归正传,做算法要用到很多的向量和矩阵运算操作,这些嘛在matlab里面已经很熟悉了,但用python的时候需要用一个查一个,挺烦的,所以在此稍作总结,后续使用过程中会根据使用体验更新。

python的矩阵运算主要依赖numpy包,scipy包以numpy为基础,大大扩展了后者的运算能力。

2. 创建一般的多维数组

import numpy as npa = np.array([1,2,3], dtype=int) # 创建1*3维数组 array([1,2,3])type(a) # numpy.ndarray类型a.shape # 维数信息(3L,)a.dtype.name # 'int32'a.size # 元素个数:3a.itemsize #每个元素所占用的字节数目:4b=np.array([[1,2,3],[4,5,6]],dtype=int) # 创建2*3维数组 array([[1,2,3],[4,5,6]])b.shape # 维数信息(2L,3L)b.size # 元素个数:6b.itemsize # 每个元素所占用的字节数目:4c=np.array([[1,2,3],[4,5,6]],dtype='int16') # 创建2*3维数组 array([[1,2,3],[4,5,6]],dtype=int16)c.shape # 维数信息(2L,3L)c.size # 元素个数:6c.itemsize # 每个元素所占用的字节数目:2c.ndim # 维数 d=np.array([[1,2,3],[4,5,6]],dtype=complex) # 复数二维数组d.itemsize # 每个元素所占用的字节数目:16d.dtype.name # 元素类型:'complex128'

3. 创建特殊类型的多维数组 

a1 = np.zeros((3,4)) # 创建3*4全零二维数组输出:array([[ 0., 0., 0., 0.],  [ 0., 0., 0., 0.],  [ 0., 0., 0., 0.]])a1.dtype.name # 元素类型:'float64'a1.size # 元素个数:12a1.itemsize # 每个元素所占用的字节个数:8  a2 = np.ones((2,3,4), dtype=np.int16) # 创建2*3*4全1三维数组a2 = np.ones((2,3,4), dtype='int16')  # 创建2*3*4全1三维数组输出:array([[[1, 1, 1, 1],  [1, 1, 1, 1],  [1, 1, 1, 1]],   [[1, 1, 1, 1],  [1, 1, 1, 1],  [1, 1, 1, 1]]], dtype=int16)  a3 = np.empty((2,3)) # 创建2*3的未初始化二维数组输出:(may vary)array([[ 1., 2., 3.],  [ 4., 5., 6.]])a4 = np.arange(10,30,5) # 初始值10,结束值:30(不包含),步长:5输出:array([10, 15, 20, 25])a5 = np.arange(0,2,0.3) # 初始值0,结束值:2(不包含),步长:0.2输出:array([ 0. , 0.3, 0.6, 0.9, 1.2, 1.5, 1.8])from numpy import pinp.linspace(0, 2, 9) # 初始值0,结束值:2(包含),元素个数:9输出:array([ 0. , 0.25, 0.5 , 0.75, 1. , 1.25, 1.5 , 1.75, 2. ])x = np.linspace(0, 2*pi, 9)输出:array([ 0.  , 0.78539816, 1.57079633, 2.35619449, 3.14159265,  3.92699082, 4.71238898, 5.49778714, 6.28318531])a = np.arange(6)输出:array([0, 1, 2, 3, 4, 5])b = np.arange(12).reshape(4,3)输出:array([[ 0, 1, 2],  [ 3, 4, 5],  [ 6, 7, 8],  [ 9, 10, 11]])c = np.arange(24).reshape(2,3,4)输出:array([[[ 0, 1, 2, 3],  [ 4, 5, 6, 7],  [ 8, 9, 10, 11]],  [[12, 13, 14, 15],  [16, 17, 18, 19],  [20, 21, 22, 23]]])  

使用numpy.set_printoptions可以设置numpy变量的打印格式

在ipython环境下,使用help(numpy.set_printoptions)查询使用帮助和示例

4. 多维数组的基本操作

加法和减法操作要求操作双方的维数信息一致,均为M*N为数组方可正确执行操作。

a = np.arange(4)输出:array([0, 1, 2, 3])b = a**2输出:array([0, 1, 4, 9])c = 10*np.sin(a)输出: array([ 0.  , 8.41470985, 9.09297427, 1.41120008])  n < 35输出:array([ True, True, True, True], dtype=bool) A = np.array([[1,1],[0,1]])B = np.array([[2,0],[3,4]])C = A * B # 元素点乘输出:array([[2, 0],  [0, 4]])D = A.dot(B) # 矩阵乘法输出:array([[5, 4],  [3, 4]])E = np.dot(A,B) # 矩阵乘法输出:array([[5, 4],  [3, 4]])

多维数组操作过程中的类型转换

When operating with arrays of different types, the type of the resulting array corresponds to the more general or precise one (a behavior known as upcasting)

即操作不同类型的多维数组时,结果自动转换为精度更高类型的数组,即upcasting

a = np.ones((2,3),dtype=int)  # int32b = np.random.random((2,3))  # float64b += a # 正确 a += b # 错误 
a = np.ones(3,dtype=np.int32)b = np.linspace(0,pi,3)c = a + bd = np.exp(c*1j)输出:array([ 0.54030231+0.84147098j, -0.84147098+0.54030231j,  -0.54030231-0.84147098j])d.dtype.name输出: 'complex128' 

多维数组的一元操作,如求和、求最小值、最大值等

a = np.random.random((2,3))a.sum()a.min()a.max()  b = np.arange(12).reshape(3,4)输出:array([[ 0, 1, 2, 3],  [ 4, 5, 6, 7],  [ 8, 9, 10, 11]])b.sum(axis=0) # 按列求和输出:array([12, 15, 18, 21])b.sum(axis=1) # 按行求和输出:array([ 6, 22, 38])b.cumsum(axis=0) # 按列进行元素累加输出:array([[ 0, 1, 2, 3],  [ 4, 6, 8, 10],  [12, 15, 18, 21]])b.cumsum(axis=1) # 按行进行元素累加输出:array([[ 0, 1, 3, 6],  [ 4, 9, 15, 22],  [ 8, 17, 27, 38]]) universal functionsB = np.arange(3)np.exp(B)np.sqrt(B)C = np.array([2.,-1.,4.])np.add(B,C) 

其他的ufunc函数包括:

all, any, apply_along_axis, argmax, argmin, argsort, average, bincount, ceil, clip, conj, corrcoef, cov, cross, cumprod, cumsum, diff, dot, floor,inner, lexsort, max, maximum, mean, median, min, minimum, nonzero, outer, prod, re, round, sort, std, sum, trace, transpose, var,vdot, vectorize, where

5. 数组索引、切片和迭代

a = np.arange(10)**3a[2]a[2:5]a[::-1] # 逆序输出for i in a: print (i**(1/3.)) 
def f(x,y): return 10*x+yb = np.fromfunction(f,(5,4),dtype=int)b[2,3]b[0:5,1]b[:,1]b[1:3,:]b[-1] 
c = np.array([[[0,1,2],[10,11,12]],[[100,101,102],[110,111,112]]])输出:array([[[ 0, 1, 2],  [ 10, 11, 12]],   [[100, 101, 102],  [110, 111, 112]]])c.shape输出:(2L, 2L, 3L)c[0,...]c[0,:,:]输出:array([[ 0, 1, 2],  [10, 11, 12]])c[:,:,2]c[...,2]输出:array([[ 2, 12],  [102, 112]]) for row in c: print(row) for element in c.flat: print(element) 
a = np.floor(10*np.random.random((3,4)))输出:array([[ 3., 9., 8., 4.],  [ 2., 1., 4., 6.],  [ 0., 6., 0., 2.]])a.ravel()输出:array([ 3., 9., 8., ..., 6., 0., 2.])a.reshape(6,2)输出:array([[ 3., 9.],  [ 8., 4.],  [ 2., 1.],  [ 4., 6.],  [ 0., 6.],  [ 0., 2.]])a.T输出:array([[ 3., 2., 0.],  [ 9., 1., 6.],  [ 8., 4., 0.],  [ 4., 6., 2.]])a.T.shape输出:(4L, 3L)a.resize((2,6))输出:array([[ 3., 9., 8., 4., 2., 1.],  [ 4., 6., 0., 6., 0., 2.]])a.shape输出:(2L, 6L)a.reshape(3,-1)输出:array([[ 3., 9., 8., 4.],  [ 2., 1., 4., 6.],  [ 0., 6., 0., 2.]]) 

详查以下函数:

ndarray.shape, reshape, resize, ravel

6. 组合不同的多维数组

a = np.floor(10*np.random.random((2,2)))输出:array([[ 5., 2.],  [ 6., 2.]])b = np.floor(10*np.random.random((2,2)))输出:array([[ 0., 2.],  [ 4., 1.]])np.vstack((a,b))输出:array([[ 5., 2.],  [ 6., 2.],  [ 0., 2.],  [ 4., 1.]])np.hstack((a,b))输出:array([[ 5., 2., 0., 2.],  [ 6., 2., 4., 1.]])  from numpy import newaxisnp.column_stack((a,b))输出:array([[ 5., 2., 0., 2.],  [ 6., 2., 4., 1.]])  a = np.array([4.,2.])b = np.array([2.,8.])a[:,newaxis]输出:array([[ 4.],  [ 2.]])b[:,newaxis]输出:array([[ 2.],  [ 8.]])np.column_stack((a[:,newaxis],b[:,newaxis]))输出:array([[ 4., 2.],  [ 2., 8.]])np.vstack((a[:,newaxis],b[:,newaxis]))输出:array([[ 4.],  [ 2.],  [ 2.],  [ 8.]])np.r_[1:4,0,4]输出:array([1, 2, 3, 0, 4])np.c_[np.array([[1,2,3]]),0,0,0,np.array([[4,5,6]])]输出:array([[1, 2, 3, 0, 0, 0, 4, 5, 6]]) 

详细使用请查询以下函数:

hstack, vstack, column_stack, concatenate, c_, r_

7. 将较大的多维数组分割成较小的多维数组

a = np.floor(10*np.random.random((2,12)))输出:array([[ 9., 7., 9., ..., 3., 2., 4.],  [ 5., 3., 3., ..., 9., 7., 7.]])np.hsplit(a,3)输出:[array([[ 9., 7., 9., 6.],  [ 5., 3., 3., 1.]]), array([[ 7., 2., 1., 6.],  [ 7., 5., 0., 2.]]), array([[ 9., 3., 2., 4.],  [ 3., 9., 7., 7.]])]np.hsplit(a,(3,4))输出:[array([[ 9., 7., 9.],  [ 5., 3., 3.]]), array([[ 6.],  [ 1.]]), array([[ 7., 2., 1., ..., 3., 2., 4.],  [ 7., 5., 0., ..., 9., 7., 7.]])] 

实现类似功能的函数包括:

hsplit,vsplit,array_split

8.  多维数组的复制操作

a = np.arange(12)输出:array([ 0, 1, 2, ..., 9, 10, 11]) not copy at all b = ab is a # Trueb.shape = 3,4a.shape # (3L,4L) def f(x) # Python passes mutable objects as references, so function calls make no copy. print(id(x)) # id是python对象的唯一标识符 id(a) # 111833936Lid(b) # 111833936Lf(a)  # 111833936L  浅复制c = a.view()c is a # Falsec.base is a # Truec.flags.owndata # Falsec.shape = 2,6a.shape # (3L,4L)c[0,4] = 1234print(a)输出:array([[ 0, 1, 2, 3],  [1234, 5, 6, 7],  [ 8, 9, 10, 11]])s = a[:,1:3]s[:] = 10print(a)输出:array([[ 0, 10, 10, 3],  [1234, 10, 10, 7],  [ 8, 10, 10, 11]])  深复制d = a.copy()d is a # Falsed.base is a # Falsed[0,0] = 9999print(a)输出:array([[ 0, 10, 10, 3],  [1234, 10, 10, 7],  [ 8, 10, 10, 11]]) 

numpy基本函数和方法一览

arange, array, copy, empty, empty_like, eye, fromfile, fromfunction, identity, linspace, logspace, mgrid, ogrid, ones, ones_like, r, zeros,zeros_like

Conversions

ndarray.astype, atleast_1d, atleast_2d, atleast_3d, mat

Manipulations

array_split, column_stack, concatenate, diagonal, dsplit, dstack, hsplit, hstack, ndarray.item, newaxis, ravel, repeat, reshape, resize,squeeze, swapaxes, take, transpose, vsplit, vstack

Questionsall, any, nonzero, where

Ordering

argmax, argmin, argsort, max, min, ptp, searchsorted, sort

Operations

choose, compress, cumprod, cumsum, inner, ndarray.fill, imag, prod, put, putmask, real, sum

Basic Statistics

cov, mean, std, var

Basic Linear Algebra

cross, dot, outer, linalg.svd, vdot

完整的函数和方法一览表链接:

https://docs.scipy.org/doc/numpy-dev/reference/routines.html#routines

9. 特殊的索引技巧

a = np.arange(12)**2输出:array([ 0, 1, 4, ..., 81, 100, 121])i = np.array([1,1,3,8,5])a[i]输出:array([ 1, 1, 9, 64, 25])j = np.array([[3,4],[9,7]])a[j]输出:array([[ 9, 16],  [81, 49]])palette = np.array([[0,0,0],[255,0,0],[0,255,0],[0,0,255],[255,255,255]])image = np.array([[0,1,2,0],[0,3,4,0]])palette[image]输出:array([[[ 0, 0, 0],  [255, 0, 0],  [ 0, 255, 0],  [ 0, 0, 0]],  [[ 0, 0, 0],  [ 0, 0, 255],  [255, 255, 255],  [ 0, 0, 0]]])i = np.array([[0,1],[1,2]])j = np.array([[2,1],[3,3]])a[i,j]输出:array([[ 2, 5],  [ 7, 11]])l = [i,j]a[l]输出:array([[ 2, 5],  [ 7, 11]])a[i,2]输出:array([[ 2, 6],  [ 6, 10]])a[:,j]输出:array([[[ 2, 1],  [ 3, 3]],  [[ 6, 5],  [ 7, 7]],  [[10, 9],  [11, 11]]])
s = np.array([i,j])print(s)array([[[0, 1],  [1, 2]],  [[2, 1],  [3, 3]]])a[tuple(s)]输出:array([[ 2, 5],  [ 7, 11]])print(tupe(s))输出:(array([[0, 1],  [1, 2]]), array([[2, 1],  [3, 3]]))

10. 寻找最大值/最小值及其对应索引值

time = np.linspace(20, 145, 5)输出: array([ 20. , 51.25, 82.5 , 113.75, 145. ])data = np.sin(np.arange(20)).reshape(5,4)输出:array([[ 0.  , 0.84147098, 0.90929743, 0.14112001],  [-0.7568025 , -0.95892427, -0.2794155 , 0.6569866 ],  [ 0.98935825, 0.41211849, -0.54402111, -0.99999021],  [-0.53657292, 0.42016704, 0.99060736, 0.65028784],  [-0.28790332, -0.96139749, -0.75098725, 0.14987721]])ind = data.argmax(axis=0)输出:array([2, 0, 3, 1], dtype=int64)time_max = time[ind]输出:array([ 82.5 , 20. , 113.75, 51.25])data_max = data[ind, xrange(data.shape[1])]输出:array([ 0.98935825, 0.84147098, 0.99060736, 0.6569866 ])np.all(data_max == data.max(axis=0))输出:True a = np.arange(5)a[[1,3,4]] = 0print(a)输出:array([0, 0, 2, 0, 0])
a = np.arange(5)a[[0,0,2]] = [1,2,3]print(a)输出:array([2, 1, 3, 3, 4])a = np.arange(5)a[[0,0,2]] += 1print(a)输出:array([1, 1, 3, 3, 4])
a = np.arange(12).reshape(3,4) b = a > 4输出:array([[False, False, False, False],  [False, True, True, True],  [ True, True, True, True]], dtype=bool)a[b]输出:array([ 5, 6, 7, 8, 9, 10, 11])a[b] = 0print(a)输出:array([[0, 1, 2, 3],  [4, 0, 0, 0],  [0, 0, 0, 0]])
a = np.arange(12).reshape(3,4)b1 = np.array([False,True,True])b2 = n.array([True,False,True,False])a[b1,:]输出:array([[ 4, 5, 6, 7],  [ 8, 9, 10, 11]])a[b1]输出:array([[ 4, 5, 6, 7],  [ 8, 9, 10, 11]])a[:,b2]输出:array([[ 0, 2],  [ 4, 6],  [ 8, 10]])a[b1,b2]输出:array([ 4, 10])

11. ix_() function

a = np.array([2,3,4,5])b = np.array([8,5,4])c = np.array([5,4,6,8,3])ax,bx,cx = np.ix_(a,b,c)print(ax) # (4L, 1L, 1L)输出:array([[[2]],  [[3]],  [[4]],  [[5]]])print(bx) # (1L, 3L, 1L)输出:array([[[8],  [5],  [4]]])print(cx) # (1L, 1L, 5L)输出:array([[[5, 4, 6, 8, 3]]])result = ax + bx*cx输出:array([[[42, 34, 50, 66, 26],  [27, 22, 32, 42, 17],  [22, 18, 26, 34, 14]],  [[43, 35, 51, 67, 27],  [28, 23, 33, 43, 18],  [23, 19, 27, 35, 15]],  [[44, 36, 52, 68, 28],  [29, 24, 34, 44, 19],  [24, 20, 28, 36, 16]],  [[45, 37, 53, 69, 29],  [30, 25, 35, 45, 20],  [25, 21, 29, 37, 17]]])result[3,2,4]输出:17

12. 线性代数运算

a = np.array([[1.,2.],[3.,4.]])a.transpose() # 转置np.linalg.inv(a) # 求逆u = np.eye(2) # 产生单位矩阵np.dot(a,a) # 矩阵乘积np.trace(a) # 求矩阵的迹y = np.array([5.],[7.]])np.linalg.solve(a,y) # 求解线性方程组np.linalg.eig(a) # 特征分解

“Automatic” Reshaping

a = np.arange(30)a.shape = 2,-1,3a.shape # (2L, 5L, 3L)print(a)array([[[ 0, 1, 2],  [ 3, 4, 5],  [ 6, 7, 8],  [ 9, 10, 11],  [12, 13, 14]],  [[15, 16, 17],  [18, 19, 20],  [21, 22, 23],  [24, 25, 26],  [27, 28, 29]]])
x = np.arange(0,10,2)y = np.arange(5)m = np.vstack([x,y])输出:array([[0, 2, 4, 6, 8],  [0, 1, 2, 3, 4]])n = np.hstack([x,y])输出:array([0, 2, 4, 6, 8, 0, 1, 2, 3, 4])

13. 矩阵的创建

a = np.array([1,2,3])a1 = np.mat(a)输出:matrix([[1, 2, 3]])type(a1)输出:numpy.matrixlib.defmatrix.matrixa1.shape输出:(1L, 3L)a.shape输出:(3L,)b=np.matrix([1,2,3])输出:matrix([[1, 2, 3]])from numpy import *data1 = mat(zeros((3,3)))data2 = mat(ones((2,4)))data3 = mat(random.rand(2,2))data4 = mat(random.randint(2,8,size=(2,5)))data5 = mat(eye(2,2,dtype=int))

14. 常见的矩阵运算

a1 = mat([1,2])a2 = mat([[1],[2]])a3 = a1 * a2print(a3)输出:matrix([[5]])print(a1*2)输出:matrix([[2, 4]])a1 = mat(eye(2,2)*0.5)print(a1.I)输出:matrix([[ 2., 0.],  [ 0., 2.]])a1 = mat([[1,2],[2,3],[4,2]])a1.sum(axis=0)输出:matrix([[7, 7]])a1.sum(axis=1)输出:matrix([[3],  [5],  [6]])a1.max() # 求矩阵元素最大值输出:4a1.min() # 求矩阵元素最小值输出:1np.max(a1,0) # 求矩阵每列元素最大值输出:matrix([[4, 3]])np.max(a1,1) # 求矩阵每行元素最大值输出:matrix([[2],  [3],  [4]])a = mat(ones((2,2)))b = mat(eye((2)))c = hstack((a,b))输出:matrix([[ 1., 1., 1., 0.],  [ 1., 1., 0., 1.]])d = vstack((a,b))输出:matrix([[ 1., 1.],  [ 1., 1.],  [ 1., 0.],  [ 0., 1.]])

15. 矩阵、数组、列表之间的互相转换

aa = [[1,2],[3,4],[5,6]]bb = array(aa)cc = mat(bb)cc.getA() # 矩阵转换为数组cc.tolist() # 矩阵转换为列表bb.tolist() # 数组转换为列表# 当列表为一维时,情况有点特殊aa = [1,2,3,4]bb = array(aa)输出:array([1, 2, 3, 4])cc = mat(bb)输出:matrix([[1, 2, 3, 4]])cc.tolist()输出:[[1, 2, 3, 4]]bb.tolist()输出:[1, 2, 3, 4]cc.tolist()[0]输出:[1, 2, 3, 4]

内容整理参考链接如下:

https://docs.scipy.org/doc/numpy-dev/user/quickstart.html

http://python.usyiyi.cn/translate/NumPy_v111/reference/arrays.scalars.html#arrays-scalars-built-in

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


  • 上一条:
    Python实现的用户登录系统功能示例
    下一条:
    python生成器,可迭代对象,迭代器区别和联系
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客