Numpy 基本用法

Numpy 数组对象

Numpy 数组中数据项的类型一致;运用向量化来处理整个数组,数度较快;python的列表使用循环遍历,运行速率差。
向量化和标量化:
python 的list 进行循环遍历:

def pySum():
    a = list(range(10000))
    b = list(range(10000))
    c = []
    for i in range(len(a)):
        c.append(a[i]**2+b[i]**2)
    return c
%timeit pySum()
Out[]:
7.88 ms ± 173 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

使用 numpy 进行向量化运算

import numpy as np
def npSum():
    a = np.arange(1000)
    b = np.arange(1000)
    c = a ** 2 + b**2
    return c
%timeit npSum()
Out[]:
7.58 µs ± 186 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)

创建ndarray数组

  1. 基于list或tuple, 创建一维或者二维数组
#基于list 
arr_1 = np.array([1,2,3,4])
print(arr_1)
Out[]:	
[1 2 3 4]
#基于tuple
arr_tuple = np.array((1, 2, 3, 4))
print(arr_tuple)
Out[]:
[1 2 3 4]
arr_2 = np.array([[1,2,3,4], [5,6,7,8]])
print(arr_2)
Out[]:
[[1 2 3 4]
 [5 6 7 8]]
  1. 基于np.arange()
arange_1 = np.arange(5)
print(arange_1)
Out[]:
[0 1 2 3 4]
arrange_2 = np.array([np.arange(5), np.arange(5)])
print(arrange_2)
Out[]:
[[0 1 2 3 4]
[0 1 2 3 4]]

3.基于arange 以及 reshape 创建多维数组

arr_arange = np.arange(24).reshape(2, 3, 4)
print(arr_arange)
Out[]:
[[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]

[[12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]]
  1. numpy.random 创建数组
    1)numpy.random.rand(d0, d1…dn)
    rand 函数根据给定维度随机生成[0, 1)之间的数据
    dn表示维度
arr_rand = np.random.rand(4, 2) # 4x2维
print(arr_rand)
Out[]:
[[0.50890399 0.99617095]
[0.24540799 0.98889552]
[0.77956855 0.31230231]
[0.49621484 0.96190756]]

2)numpy.random.randn(d0, d1, …,dn)
randn 函数返回一个或一组样本,具有标准正态分布。
• 标准正态分布—standard normal distribution
• 标准正态分布又称为 u 分布,是以 0 为均值、以 1 为标准差的正态分布,记为 N(0,1)。

randn_arr = np.random.randn() # 当 没 有 参 数 时 , 返 回 单 个 数 据 
print(randn_arr)
Out[]:
1.9738299282232168
rand1_arr = np.random.rand(4, 2)
print(rand1_arr)
Out[]:
[[0.76553421 0.60120231]
 [0.0821647  0.63307704]
 [0.80629446 0.5506062 ]
 [0.50273055 0.82052982]]

3)numpy.random.randint(low, high=None, size=None, dtype=“l”)
在区间[low, high)返回随机整数,不包含high,
size 为维度大小,dtype 为数据类型,默认的数据类型是 np.int。
若high没有填写,则随机数范围区间[0, low)

radint = np.random.randint(1, size=5) # 返 回 [0,1) 之 间 的 整 数 ,
radint 
Out[21]:array([0, 0, 0, 0, 0])
radint_1 = np.random.randint(1, 5) # 返 回 1 个 [1,5) 时 间 的 随 机 整 数
radint_1
Out[22]:1
adint_2 = np.random.randint(-5, 5, size=(2, 2))
radint_2
Out[23]:array([[-2,  4],
       [-4,  1]])

4)numpy.random.random_integers(low, high=None, size=None)
• 返回随机整数,范围区间为 [low,high],包含 low 和 high
• 参数:low 为最小值,high 为最大值,size 为数组维度大小
• high 没有填写时,默认生成随机数的范围是 [1,low]
该函数在最新的 numpy 版本中已被替代,建议使用 randint 函数
5)生成[0,1)之间的浮点数
• numpy.random.random_sample(size=None)
• numpy.random.random(size=None)
• numpy.random.ranf(size=None)
• numpy.random.sample(size=None)

print(np.random.random_sample(size=(2, 2)))
print(np.random.random(size=(2, 2)))
print(np.random.ranf(size=(2, 2)))
print(np.random.sample(size=(2, 2)))
Out[25]:
[[0.1475009  0.13088664]
 [0.53565553 0.35389504]]
[[0.12350834 0.95088076]
 [0.42499702 0.14313006]]
[[0.59485327 0.36676694]
 [0.4258283  0.51248472]]
[[0.19318311 0.24523378]
 [0.92230069 0.88279368]]

5)numpy.random.choice(a, size=None, replace=True, p=None)
• 从给定的一维数组中生成随机数
• 参数:a 为一维数组类似数据或整数;size 为数组维度;p 为数组中的数据出现的概率
• a 为整数时,对应的一维数组为 np.arange(a)
• 参数 p 的长度与参数 a 的长度需要一致;
• 参数 p 为概率,p 里的数据之和应为 1

In [26]: np.random.choice(5,3)
Out[26]:array([4, 4, 3])
In [27]:np.random.choice(5, 3, replace=False) # 当 replace 为 False 时 , 生 成 的 随 机 数 不 能 有 重 复 的 数 值xnp.random.choice(5, 3, replace=False)
Out[27]:array([2, 3, 0])
np.random.choice(['1', '2', '4', '7', '9','5'], size=(3,2))
Out[28]:array([['5', '4'],
       ['1', '4'],
       ['9', '7']], dtype='<U1')
In[31]:np.random.choice(['1', '2', '4', '7', '9','5'], size=(3,2),p=[0.1,0.5,0.1,0.1,0.1,0.1])xnp.random.choice(['1', '2', '4', '7', '9','5'], size=(3,2),p=[0.1,0.5,0.1,0.1,0.1,0.1])
Out[31]:array([['7', '5'],
       ['7', '1'],
       ['2', '9']], dtype='<U1')

6)numpy.random.seed()
• np.random.seed() 的作用:使得随机数据可预测。
• 当我们设置相同的 seed,每次生成的随机数相同。如果不设置 seed,则每次会生成不同的随机数

In [32]: np.random.seed(0)np.random.rand(5)
Out[32]:array([0.5488135 , 0.71518937, 0.60276338, 0.54488318, 0.4236548 ])
In[33]:np.random.seed(2000)np.random.rand(5)
Out[33]:array([0.57051729, 0.56452876, 0.48844183, 0.33647775, 0.37586818])
In[34]:np.random.seed(2000)np.random.rand(5)
Out[34]:array([0.57051729, 0.56452876, 0.48844183, 0.33647775, 0.37586818])

Numpy 的数值类型

在这里插入图片描述
创建ndarray数组时,可以指定数值类型:

 In[35]:np.arange(5, dtype=float)xnp.arange(5, dtype=float)
 Out[35]:array([0., 1., 2., 3., 4.])

ndarray数组的属性

  1. dtype属性,数组的数据类型
 In[38]: np.array([1.22, 3.333, 9], dtype='int8')​
 Out[38]:array([1, 3, 9], dtype=int8)
 In [39]: np.arange(4, dtype='D') # 'D' 表 示 复 数 类 型
 Out[39]:array([0.+0.j, 1.+0.j, 2.+0.j, 3.+0.j])
  1. ndim属性,数组的维度数量
In [41]: aa = np.array([[1,4,6], [9,0,2]])
         aa.ndim
Out[41]:2
  1. shape属性,数组对象尺度,对于矩阵即n行m列
In [42]: aa.shape
Out[42]:(2, 3)
  1. size属性保存元素的数量,相当于 n x m的值
In [43]: aa.size
Out[43]:6
  1. itemsize 属性,返回数组中各个元素所占字节数大小
In[44]:aa.itemsize
Out[44]:4
  1. nbytes 属性,整个数组所需要的字节数量,等于size x itemsize
In [45]: aa.nbytes
Out[45]:24
  1. T 属性,数组转置
In[47]:nb = np.arange(24).reshape(4,6)
       nb
Out[47]: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]])
In [48]: nb.T
Out[48]:array([[ 0,  6, 12, 18],
      [ 1,  7, 13, 19],
      [ 2,  8, 14, 20],
      [ 3,  9, 15, 21],
      [ 4, 10, 16, 22],
      [ 5, 11, 17, 23]])
  1. 复数的实部和虚部属性,real和imag属性
In [49]:ddn ddn = np.array([1.1 + 3j, 3+9j])
	ddn
Out[49]:array([1.1+3.j, 3. +9.j])
In [50]:ddn.real   #实部
Out[50]:array([1.1, 3. ])
In [51]:ddn.imag # 虚部
Out[51]:array([3., 9.])
  1. flat 属性,返回一个numpy.flatitaer对象,即可迭代的对象
In [52]: e = np.arange(6).reshape(2,3)
      e
Out[52]:array([[0, 1, 2],
      [3, 4, 5]])
In [53]: f = e.flat
         f
Out[53]:<numpy.flatiter at 0x1e50f14d840>
In [54]: for i in f:    
             print(i)
Out[54]:
0
1
2
3
4
5
In [55]: f[2] # 位置索引
Out[55]: 2
In [56]: f[[1,4]]
Out[56]: array([1, 4])
In [57]: e.flat=7 # 进行赋值
         e
Out[57]: array([[7, 7, 7],
              [7, 7, 7]])
In [58]: flat[[1,4]]=1
         e
Out[58]: array([[7, 1, 7],
               [7, 1, 7]])           

ndarray数组的切片和索引

在这里插入图片描述

处理数组形状

  1. reshape() 和resize()
    reshape()返回新的数组
    resize()在原数组上操作,会改变原数组,相当于inplace=True
In[60]: bbb =  np.arange(12).reshape(3, 4)
       bbb
Out[60]: array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [61]: bbb.reshape(4,3)
Out[61]:array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]]
In [63]:bbb bbb.resize(4,3)
	bbb
Out[63]:array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
  1. ravel() 和 flatten(),将多维数组转换成一维数组
In [64]:bbb.ravel()
Out[64]:array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])
In [66]:bbb
Out[66]:array([[ 0,  1,  2],
      [ 3,  4,  5],
      [ 6,  7,  8],
      [ 9, 10, 11]])
In [67]:bbb.flatten()
Out[67]:array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11])

两者的区别在于返回拷贝(copy)还是返回视图(view),flatten() 返回一份拷贝,需要分配新的内存空间,对拷贝所做的修改不会影响原始矩阵,而 ravel() 返回的是视图(view),会影响原始矩阵。

In[68]: bbb.flatten()[2] = 90	# flatten()返回的是拷贝,不影响原数组,数组bbb没有发生变化
	bbb
Out[68]:array([[ 0,  1,  2],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In[70]: bbb.ravel()[2] = 90 # ravel()返回的是视图,会影响原始数组,bbb会发生变化
	bbb
Out[70]: array([[ 0,  1, 90],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
  1. 转置,除了T之外还可以用transpose()函数实现
In[71]:bbb.transpose()
Out[71]:array([[ 0,  3,  6,  9],
       [ 1,  4,  7, 10],
       [90,  5,  8, 11]])

堆叠数组

  1. 水平叠加 hstack()
    column_stack() 函数以列方式对数组进行叠加,功能类似 hstack()
In [72]: h_a = bbb * 2h_a
Out[72]:array([[  0,   2, 180],
      [  6,   8,  10],
      [ 12,  14,  16],
      [ 18,  20,  22]])
In [73]: np.hstack((bbb, h_a))
Out[73]:array([[  0,   1,  90,   0,   2, 180],
      [  3,   4,   5,   6,   8,  10],
      [  6,   7,   8,  12,  14,  16],
      [  9,  10,  11,  18,  20,  22]])
In [74]: np.column_stack((bbb, h_a))
Out[74]:array([[  0,   1,  90,   0,   2, 180],
      [  3,   4,   5,   6,   8,  10],
      [  6,   7,   8,  12,  14,  16],
      [  9,  10,  11,  18,  20,  22]])
  1. 垂直叠加: vstack()
    row_stack() 函数以行方式对数组进行叠加,功能类似 vstack()
In [75]: np.vstack((bbb, h_a))
Out[75]:array([[  0,   1,  90],
      [  3,   4,   5],
      [  6,   7,   8],
      [  9,  10,  11],
      [  0,   2, 180],
      [  6,   8,  10],
      [ 12,  14,  16],
      [ 18,  20,  22]])
In [76]:np.row_stack((bbb, h_a))
Out[76]:array([[  0,   1,  90],
      [  3,   4,   5],
      [  6,   7,   8],
      [  9,  10,  11],
      [  0,   2, 180],
      [  6,   8,  10],
      [ 12,  14,  16],
      [ 18,  20,  22]])
  1. concatenate() 方法,通过设置 axis 的值来设置叠加方向
    axis=1 时,沿水平方向叠加
    axis=0 时,沿垂直方向叠加
 In [77]: np.concatenate((bbb, h_a), axis=1)xnp.concatenate((bbb, h_a), axis=1)
 Out[77]:array([[  0,   1,  90,   0,   2, 180],
       [  3,   4,   5,   6,   8,  10],
       [  6,   7,   8,  12,  14,  16],
       [  9,  10,  11,  18,  20,  22]])
In [78]:np.concatenate((bbb, h_a), axis=0)
Out[78]:array([[  0,   1,  90],
       [  3,   4,   5],
       [  6,   7,   8],
       [  9,  10,  11],
       [  0,   2, 180],
       [  6,   8,  10],
       [ 12,  14,  16],
       [ 18,  20,  22]])

数组轴方向示意图
叠加示意图

  1. 深度叠加, np.dstack()
In [82]:d_stack = np.dstack((bbb, h_a))
print(bbb.shape, h_a.shape,d_stack.shape)
d_stack xd_stack = np.dstack((bbb, h_a))
print(bbb.shape, h_a.shape,d_stack.shape)
d_stack 
(4, 3) (4, 3) (4, 3, 2)
Out[82]:array([[[  0,   0],
        [  1,   2],
        [ 90, 180]],
       [[  3,   6],
        [  4,   8],
        [  5,  10]],
       [[  6,  12],
        [  7,  14],
        [  8,  16]],
       [[  9,  18],
        [ 10,  20],
        [ 11,  22]]])

深度叠加的示意图如下:
深度叠加示意图

数组的拆分

数组的拆分可以分为横向拆分、纵向拆分以及深度拆分。涉及的函数为 hsplit()、vsplit()、dsplit() 以及 split()。
沿横向轴拆分(axis=1)

In[90]::bbb_1 = np.array([[ 0,  1, 90, 100],
       [ 3,  4,  5, 99],
       [ 6,  7,  8, 88],
       [ 9, 10, 11, 77]])	
       bbb_1 
Out[90]:array([[  0,   1,  90, 100],
       [  3,   4,   5,  99],
       [  6,   7,   8,  88],
       [  9,  10,  11,  77]])
In [91]: np.hsplit(bbb_1,2)
Out[91]:[array([[ 0,  1],
        [ 3,  4],
        [ 6,  7],
        [ 9, 10]]), array([[ 90, 100],
        [  5,  99],
        [  8,  88],
        [ 11,  77]])]
In [93]np.split(bbb_1, 2, axis=1)
Out[93]:[array([[ 0,  1],
        [ 3,  4],
        [ 6,  7],
        [ 9, 10]]), array([[ 90, 100],
        [  5,  99],
        [  8,  88],
        [ 11,  77]])]

沿纵向轴拆分(axis=0)

In [94]: np.vsplit(bbb_1, 2)
Out[94]:[array([[  0,   1,  90, 100],
        [  3,   4,   5,  99]]), array([[ 6,  7,  8, 88],
        [ 9, 10, 11, 77]])]
 In [95]:np.split(bbb_1, 2, axis=0)
 Out[95]:[array([[  0,   1,  90, 100],
        [  3,   4,   5,  99]]), array([[ 6,  7,  8, 88],
        [ 9, 10, 11, 77]])]

深度拆分

In [96]: d_stack
Out[96]:array([[[  0,   0],
        [  1,   2],
        [ 90, 180]],

       [[  3,   6],
        [  4,   8],
        [  5,  10]],

       [[  6,  12],
        [  7,  14],
        [  8,  16]],

       [[  9,  18],
        [ 10,  20],
        [ 11,  22]]])
In[97]: np.dsplit(d_stack, 2)
Out[97]:[array([[[ 0],
         [ 1],
         [90]],
 
        [[ 3],
         [ 4],
         [ 5]],
 
        [[ 6],
         [ 7],
         [ 8]],
 
        [[ 9],
         [10],
         [11]]]), array([[[  0],
         [  2],
         [180]],
 
        [[  6],
         [  8],
         [ 10]],
 
        [[ 12],
         [ 14],
         [ 16]],
 
        [[ 18],
         [ 20],
         [ 22]]])]

数组的类型转换

  1. 转化成list, tolist()
In [98]:bbb
Out[98]:array([[ 0,  1, 90],
       [ 3,  4,  5],
       [ 6,  7,  8],
       [ 9, 10, 11]])
In [99]:bbb.tolist()
Out[99]:[[0, 1, 90], [3, 4, 5], [6, 7, 8], [9, 10, 11]]
  1. 转换成指定类型, astype()函数
 In [100]: bbb.astype(float)
 Out[100]:array([[ 0.,  1., 90.],
       [ 3.,  4.,  5.],
       [ 6.,  7.,  8.],
       [ 9., 10., 11.]])

numpy 常用统计函数

常用的函数如下, 请注意函数在使用时需要指定 axis 轴的方向,若不指定,默认统计整个数组。
• np.sum(),返回求和
• np.mean(),返回均值
• np.max(),返回最大值
• np.min(),返回最小值
• np.ptp(),数组沿指定轴返回最大值减去最小值,即(max-min)
• np.std(),返回标准偏差(standard deviation)
• np.var(),返回方差(variance)
• np.cumsum(),返回累加值
• np.cumprod(),返回累乘积值

In [101]:bbb_1
Out[101]:array([[  0,   1,  90, 100],
       [  3,   4,   5,  99],
       [  6,   7,   8,  88],
       [  9,  10,  11,  77]])
In [102]:np.max(bbb_1)
Out[102]:100
In [103]:np.max(bbb_1, axis=1)
Out[103]:array([100,  99,  88,  77])
In [104]: np.max(bbb_1, axis=0)
Out[104]:array([  9,  10,  90, 100])
In [105]:np.min(bbb_1)
Out[105]:0
In [106]:np.min(bbb_1, axis=1)
Out[106]:array([0, 3, 6, 9])
In [107]:np.min(bbb_1, axis=0)
Out[107]:array([ 0,  1,  5, 77])
In [108]: np.ptp(bbb_1)
Out[108]:100
In [109]: np.ptp(bbb_1, axis=1)
Out[109]:array([100,  96,  82,  68])
In [111]: np.ptp(bbb_1, axis=0)
Out[111]:array([ 9,  9, 85, 23])

In [113]:bbb_1
Out[113]:array([[  0,   1,  90, 100],
       [  3,   4,   5,  99],
       [  6,   7,   8,  88],
       [  9,  10,  11,  77]])
In [114]:np.cumsum(bbb_1, axis=1)
Out[114]:array([[  0,   1,  91, 191],
       [  3,   7,  12, 111],
       [  6,  13,  21, 109],
       [  9,  19,  30, 107]], dtype=int32)
In [115]:np.cumsum(bbb_1, axis=0)
Out[115]:array([[  0,   1,  90, 100],
       [  3,   5,  95, 199],
       [  9,  12, 103, 287],
       [ 18,  22, 114, 364]], dtype=int32)
In [116]: bbb_1
Out[116]:array([[  0,   1,  90, 100],
       [  3,   4,   5,  99],
       [  6,   7,   8,  88],
       [  9,  10,  11,  77]])
       
In [117]:np.cumprod(bbb_1, axis=1)
Out[117]:array([[    0,     0,     0,     0],
       [    3,    12,    60,  5940],
       [    6,    42,   336, 29568],
       [    9,    90,   990, 76230]], dtype=int32)
In [118]:np.cumprod(bbb_1, axis=0)
Out[118]:array([[       0,        1,       90,      100],
       [       0,        4,      450,     9900],
       [       0,       28,     3600,   871200],
       [       0,      280,    39600, 67082400]], dtype=int32)

数组的广播

当数组跟一个标量进行数学运算时,标量需要根据数组的形状进行扩展,然后执行运算。这个扩展的过程称为“广
播(broadcasting)”

 In [119]: bbb_1
 Out[119]:array([[  0,   1,  90, 100],
       [  3,   4,   5,  99],
       [  6,   7,   8,  88],
       [  9,  10,  11,  77]])
 In [120]: dd = bbb_1 + 2
 	   dd
 Out[120]:array([[  2,   3,  92, 102],
       [  5,   6,   7, 101],
       [  8,   9,  10,  90],
       [ 11,  12,  13,  79]])

Numpy 中 Meshgrid 函数介绍

meshgrid 函数用两个坐标轴上的点在平面上画网格。
用法:
   [X,Y]=meshgrid(x,y)
   [X,Y]=meshgrid(x) 与 [X,Y]=meshgrid(x,x) 是等同的
   [X,Y,Z]=meshgrid(x,y,z) 生成三维数组,可用来计算三变量的函数和绘制三维立体图
这里,主要以[X,Y]=meshgrid(x,y)为例,来对该函数进行介绍。[X,Y] = meshgrid(x,y) 将向量 x 和 y定义的区域转换成矩阵 X 和 Y , 其中矩阵 X 的行向量是向量 x 的简单复制,而矩阵 Y 的列向量是向量 y 的简单复制 (注:
下面代码中 X 和 Y 均是数组,在文中统一称为矩阵了)。假设 x 是长度为 m 的向量,y 是长度为 n 的向量,则最终生成
的矩阵 X 和 Y 的维度都是 nm (注意不是 mn)。

In [122]: import matplotlib.pyplot as plt
	  %matplotlib inline
	  m, n = (5, 3)
	  x = np.linspace(0, 1, m)
	  y = np.linspace(0, 1, n)
	  X, Y = np.meshgrid(x, y)
	  x
Out[122]:array([0.  , 0.25, 0.5 , 0.75, 1.  ])
In [123]:y 
Out[123]:array([0. , 0.5, 1. ])
In [124]: X
Out[124]:array([[0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ],
       [0.  , 0.25, 0.5 , 0.75, 1.  ]])
In [125]: Y
Out[125]:array([[0. , 0. , 0. , 0. , 0. ],
       [0.5, 0.5, 0.5, 0.5, 0.5],
       [1. , 1. , 1. , 1. , 1. ]])
plt.plot(X, Y, marker='.', color='blue', linestyle='none')
plt.show()

在这里插入图片描述
可以获得网格平面上坐标点的数据

In[129]: mesg =  [i for i in zip(X.flat,Y.flat)]
	 mesg
Out[129]:[(0.0, 0.0),
 (0.25, 0.0),
 (0.5, 0.0),
 (0.75, 0.0),
 (1.0, 0.0),
 (0.0, 0.5),
 (0.25, 0.5),
 (0.5, 0.5),
 (0.75, 0.5),
 (1.0, 0.5),
 (0.0, 1.0),
 (0.25, 1.0),
 (0.5, 1.0),
 (0.75, 1.0),
 (1.0, 1.0)]
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值