zoukankan      html  css  js  c++  java
  • Numpy 操作

    一、Numpy 属性

    # 列表转化为矩阵
    In [2]: arr = np.array([[1,2,3],[4,5,6]])
    In [3]: arr
    Out[3]:
    array([[1, 2, 3],
           [4, 5, 6]])

    1,维度 ndim

    In [7]: arr.ndim
    Out[7]: 2

    2,行数和列数 shape

    In [8]: arr.shape
    Out[8]: (2, 3)

    3,元素个数 size

    In [8]: arr.shape
    Out[8]: (2, 3)

    二,创建array

    1,创建数组

    In [10]: arr = np.array([[1,2,3],[4,5,6]])
    In [11]: arr
    Out[11]:
    array([[1, 2, 3],
           [4, 5, 6]])

    2,创建数组并指定类型

    In [12]: arr = np.array([[1,2,3],[4,5,6]],dtype=int)
    In [13]: arr
    Out[13]:
    array([[1, 2, 3],
           [4, 5, 6]])
    In [14]: arr = np.array([[1,2,3],[4,5,6]],dtype=float)
    In [15]: arr
    Out[15]:
    array([[ 1.,  2.,  3.],
           [ 4.,  5.,  6.]])

    3,创建数据全为0的数组  np.zero((行,列))

    In [16]: arr = np.zeros((3,4))
    In [17]: arr
    Out[17]:
    array([[ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.]])

    4,创建数据全为1的数组 np.ones((行,列))

    In [18]: arr = np.ones((3,4))
    In [19]: arr
    Out[19]:
    array([[ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.],
           [ 1.,  1.,  1.,  1.]])

    5,创建数组接近0的数组 np.empty((行,列))

    6,按照指定范围创建数组 np.arange(开始,结束,步长)

    In [24]: arr = np.arange(10,50,2)
    In [25]: arr
    Out[25]:
    array([10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42,
           44, 46, 48])
    In [28]: arr = np.arange(10,50,2).reshape(4,5) # 通reshape改变数据形状
    In [29]: arr
    Out[29]:
    array([[10, 12, 14, 16, 18],
           [20, 22, 24, 26, 28],
           [30, 32, 34, 36, 38],
           [40, 42, 44, 46, 48]])

    7,创建线段

    In [31]: np.linspace(1,20,5)
    Out[31]: array([  1.  ,   5.75,  10.5 ,  15.25,  20.  ])

    三,运算

    In [38]: a = np.array([10,20,30,40])  # 创建a
    In [39]: b = np.arange(4) # 创建b
    In [40]: b-a # 相减
    Out[40]: array([-10, -19, -28, -37])
    In [41]: b+a # 相加
    Out[41]: array([10, 21, 32, 43])
    In [42]: b*a # 乘法
    Out[42]: array([  0,  20,  60, 120])
    In [43]: a**2 # 平方
    Out[43]: array([ 100,  400,  900, 1600])
    In [46]: a<11 # 判断,返回值为布尔
    Out[46]: array([ True, False, False, False], dtype=bool)
    In [49]: a # 创建a
    Out[49]:
    array([[1, 2],
           [2, 3]])
    In [50]: b = np.arange(4).reshape(2,2) # 创建b
    In [51]: b
    Out[51]:
    array([[0, 1],
           [2, 3]])
    In [52]: a*b  # 对应元素相乘
    Out[52]:
    array([[0, 2],
           [4, 9]])
    In [53]: np.dot(a,b) # 标准的矩阵乘法计算
    Out[53]:
    array([[ 4,  7],
           [ 6, 11]])
    In [64]: a=np.random.random((2,4)) # 产生一个2行4列的矩阵,数值在0到1之间
    In [65]: np.sum(a) # 矩阵的和
    Out[65]: 4.4227580588680375
    In [66]: np.min(a) # 矩阵的最小值
    Out[66]: 0.16635521270028986
    In [67]: np.max(a) # 矩阵的最大值
    Out[67]: 0.78738798170221957
    In [76]: a = np.arange(1,10) # 产生一个数组a
    In [77]: np.argmax(a) # 数组a的最大值
    Out[77]: 8
    In [78]: np.argmin(a) # 数组a的最小值
    Out[78]: 0
    In [79]: np.mean(a)   # 数组a的平均值
    Out[79]: 5.0
    In [80]: np.median(a) # 数组a的中位数
    Out[80]: 5.0
    In [81]: np.diff(a)   # 数组中后一个元素和前一个元素的差值,新组成的一个数组
    Out[81]: array([1, 1, 1, 1, 1, 1, 1, 1])
    In [82]: np.cumsum(a) # 数组中,第i项和第i-1项的和赋值给i项
    Out[82]: array([ 1,  3,  6, 10, 15, 21, 28, 36, 45])
    In [83]: np.average(a)# 数组a的平均数
    Out[83]: 5.0
    In [92]: a = np.arange(10,0,-1).reshape(2,5) # 创建一个2行5列的数组a,值从10到0,每次递减一个
    In [93]: a
    Out[93]:
    array([[10,  9,  8,  7,  6],
           [ 5,  4,  3,  2,  1]])
    In [94]: np.sort(a) # 对数组的每一行进行排序
    Out[94]:
    array([[ 6,  7,  8,  9, 10],
           [ 1,  2,  3,  4,  5]])
    In [95]: np.transpose(a) # 转置数组a
    Out[95]:
    array([[10,  5],
           [ 9,  4],
           [ 8,  3],
           [ 7,  2],
           [ 6,  1]])
    In [96]: a.T # 转置数组a
    Out[96]:
    array([[10,  5],
           [ 9,  4],
           [ 8,  3],
           [ 7,  2],
           [ 6,  1]])
    In [97]: np.clip(a,5,8) # 将数组中元素值比5小的值赋为5,元素值比8大的值赋为8
    Out[97]:
    array([[8, 8, 8, 7, 6],
           [5, 5, 5, 5, 5]])

    四,通过索引取元素

    In [98]: a # 数组a
    Out[98]:
    array([[10,  9,  8,  7,  6],
           [ 5,  4,  3,  2,  1]])
    In [99]: a[0] # 取数组a的第1行
    Out[99]: array([10,  9,  8,  7,  6])
    In [100]: a[0][0] # 取数组a的第一行的第一个元素
    Out[100]: 10
    In [101]: a[0,0]  # 取数组a的第一行的第一个元素的另一种写法
    Out[101]: 10
    In [102]: a[0,1:3]# 取数组a的第一行的,第2列到第3列
    Out[102]: array([9, 8])
    In [103]: a.flatten() # 将多维的矩阵转换为一行的矩阵
    Out[103]: array([10,  9,  8,  7,  6,  5,  4,  3,  2,  1])

    五、合并

    In [110]: a # 数组a
    Out[110]: array([1, 1, 1])
    In [111]: b # 数组b
    Out[111]: array([2, 2, 2])
    In [112]: np.vstack((a,b)) # 上下合并
    Out[112]:
    array([[1, 1, 1],
           [2, 2, 2]])
    In [113]: np.hstack((a,b))# 左右合并
    Out[113]: array([1, 1, 1, 2, 2, 2])

    六、分割

    1,等量分割 np.split()

    1.1,按行分割

    In [138]: a # 3行4列的数组a
    Out[138]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    In [139]: np.split(a,1,axis=0) # 将数组a按行进行分割,一行一组。如果此时将参数改为(a,2,axis=0)是不行的,因为是等量分割,前两行为一项,后一行为一项是不等量的
    Out[139]:
    [array([[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]])]
    In [140]: np.split(a,3,axis=0)# 将数组a按行进行分割,三行一组
    Out[140]: [array([[0, 1, 2, 3]]), array([[4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

    1.2,按列分割

    In [133]: a # 3行4列的数组a
    Out[133]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    In [134]: np.split(a,2,axis=1) # 将数组a,按照列分割,2列一组。如果现在参数是(a,3,axis=1)这样是不行的,因为进行的是等量分割,前三列为一项,只剩下一项不是等量的。
    Out[134]:
    [array([[0, 1],
            [4, 5],
            [8, 9]]), array([[ 2,  3],
            [ 6,  7],
            [10, 11]])]

    2,不等量分割 np.array_split()

    In [144]: a # 3行4列的数组a
    Out[144]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    In [145]: np.array_split(a,3,axis=1) # 按照列进行不等量的分割
    Out[145]:
    [array([[0, 1],
            [4, 5],
            [8, 9]]), array([[ 2],
            [ 6],
            [10]]), array([[ 3],
            [ 7],
            [11]])]
    In [146]: np.array_split(a,2,axis=0)# 按照行进行不等量的分割
    Out[146]:
    [array([[0, 1, 2, 3],
            [4, 5, 6, 7]]), array([[ 8,  9, 10, 11]])]

    3,其他分割

    In [147]: np.vsplit(a,1) # 等同于np.split(a,1,axis=0)
    Out[147]:
    [array([[ 0,  1,  2,  3],
            [ 4,  5,  6,  7],
            [ 8,  9, 10, 11]])]
    In [148]: np.hsplit(a,2) # 等同于np.aplit(a,2,axis=1)
    Out[148]:
    [array([[0, 1],
            [4, 5],
            [8, 9]]), array([[ 2,  3],
            [ 6,  7],
            [10, 11]])]

    七、赋值和拷贝

    In [149]: a # 创建3行4列数组a
    Out[149]:
    array([[ 0,  1,  2,  3],
           [ 4,  5,  6,  7],
           [ 8,  9, 10, 11]])
    
    In [150]: b = a # 创建数组b,将a的值赋给b
    
    In [151]: a[0][0]=111 # 改变a[0][0]的值为111
    
    In [152]: b[0][0]==111# 这时,b的值也会变为111
    Out[152]: True
    
    In [153]: c=b.copy()  # 创建数组c,值为b的值,通过copy的方式

     In [157]: b[0][0]=222 # 将b[0][0]的值改为222

     In [158]: c[0][0]==222# 这时,c[0][0]还是没有改变
     Out[158]: False

     In [159]: c[0][0]
     Out[159]: 111

     
    更多内容,可访问:http://rexyan.cn
  • 相关阅读:
    垃圾回收的整个过程
    实验:老年代空闲空间放不下minorgc晋升的对象发生fullgc
    实验: survivor放不下的对象进入老年代
    实验: 动态对象年龄判定
    永久代、栈内存大小怎么设置
    如何设置高并发系统的jvm堆内存大小
    Bin、App_Data等文件夹详述(转自http://blog.csdn.net/zzjiadw/article/details/6801506)
    谈谈并行、并发或多线程
    SQL---存储过程---存储过程编写案例
    SQL---存储过程---sp_addextendedproperty表字段加描述
  • 原文地址:https://www.cnblogs.com/rexyan/p/7307439.html
Copyright © 2011-2022 走看看