zoukankan      html  css  js  c++  java
  • ndarray笔记续

    数组的索引与切片

    多维数组的索引

     1 import numpy as np
     2 arr=np.arange(1,25).reshape(2,3,4)
     3 arr
     4 # 输出 array([[[ 1,  2,  3,  4],
     5               [ 5,  6,  7,  8],
     6               [ 9, 10, 11, 12]],
     7  
     8              [[13, 14, 15, 16],
     9               [17, 18, 19, 20],
    10               [21, 22, 23, 24]]])
    11 arr[1][2][3]
    12 # 输出24
    13 arr[1,2,3]  # 与arr[1][2][3]结果一样
    14 # 输出24
    15 
    16 arr[0,0:2,1:3]
    17 # 输出array([[2, 3],
    18                    [6, 7]])
    19 arr[0][0:2][1:3]  # 与arr[0,0:2,1:3]结果不一样
    20 # 输出array([[5, 6, 7, 8]])
    21 
    22 arr[0,1:2,1:3]
    23 # 输出array([[6, 7]])
    24 arr[0][0:2][1][1:3]  # 这样与arr[0,1:2,1:3]结果才能达到一致
    25 # 输出array([6, 7])

    2. NumPy中的数组的切片

    3. 布尔型索引

     1 # 接上一个代码
     2 arr>6
     3 # 输出array([[[False, False, False, False],
     4              [False, False,  True,  True],
     5              [ True,  True,  True,  True]],
     6 
     7              [[ True,  True,  True,  True],
     8               [ True,  True,  True,  True],
     9               [ True,  True,  True,  True]]])
    10 
    11 arr[arr>6]
    12 # 输出array([ 7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24])

    4. 花式索引

     1 import numpy as np
     2 arr1 = np.arange(32).reshape(8,4)
     3 # 输出  array([[ 0,  1,  2,  3],
     4               [ 4,  5,  6,  7],
     5               [ 8,  9, 10, 11],
     6               [12, 13, 14, 15],
     7               [16, 17, 18, 19],
     8               [20, 21, 22, 23],
     9               [24, 25, 26, 27],
    10               [28, 29, 30, 31]])
    11 
    12 arr1[[0,3,5],[0,3,2]]  # 前一个取出行,后一个按位取出对应的列
    13 # 输出 array([ 0, 15, 22])
    14 
    15 arr1[[0,3,5]]
    16 # 输出 array([[ 0,  1,  2,  3],
    17              [12, 13, 14, 15],
    18              [20, 21, 22, 23]])
    19 
    20 arr1[np.ix_([0,3,5],[0,2,1,3])]  # [0,2,1,3]可以改变列的位置
    21 # 输出 array([[ 0,  2,  1,  3],
    22              [12, 14, 13, 15],
    23              [20, 22, 21, 23]])
    24                

    数组转置与轴对换

    1. transpose函数用于数组转置,对于二维数组来说就是行列互换

    2. 数组的T属性,也是转置

    arr1 = arr.T与arr2=arr.transpose()效果一样

    通用函数:快速的元素级数组函数

    ufunc:一种对ndarray中的数据执行元素级运算的函数,也可以看作是简单函数(接受一个或多个标量值,并产生一个或多个标量值)的矢量化包装起

    一元ufunc

    说明

    abs,fabs

    计算整数、浮点数或复数的绝对值。对于非复数值,可以使用更快的fabs

    sqrt

    计算各元素的平方根,相当于arr**0.5

    square

    计算各元素的平方,相当于arr**2

    exp

    计算各元素的指数e的x次方

    log,log10log2

    log1p

    分别为自然对数、底数是10的log,底数为2的log,log(1+x)

    sign

    计算各元素的正负号:1正数,0零,-1负数

    cell

    计算各元素的ceiling值,即大于等于该值的最小整数

    floor

    计算各元素的floor值,即小于等于该值的最大整数

    rint

    将各元素值四舍五入到最接近的整数,保留dtype

    modf

    将数组的小数位和整数部分以两个独立数组的形式返回

    isnan

    返回一个表示“哪些值是NaN(不是一个数字)”的布尔类型数组

    isfinite,isinf

    分别返回一个表示“哪些元素是有穷的(非inf,非NaN)”或“哪些元素是无穷的”的布尔型数组

    cos,cosh,sin

    sinh,tan,tanh

    普通型和双曲型三角函数

    arccos,arccosh,

    arcsin,arctan,

    arctanh

    反三角函数

    logical_not

    计算各元素not x的真值,相当于~和-arr

    add

    将数组中相同位置对应的元素相加

    substract

    从第一个数组中减去第二个数组中的元素

    multiply

    数组元素相乘

    divide,floor_divive

    除法或者向下圆整除法(丢弃余数)

    pow

    对第一个数组中的元素A,根据第二个数组中的相应元素B,计算A的B次方

    maximum,fmax

    元素级别的最大值,fmax会忽略NaN

    minimum,fmin

    元素级别的最小值,fmin会忽略NaN

    mod

    元素级的求模(除法的余数)

    copysign

    将第二个数组中的值的符号复制给第一个数组中的对应位置的值

    greater,

    greater_equal,less

    less_equal,equal

    not_equal

    执行元素级别的比较运算,最终产生布尔型数组

    logical_and,

    logical_or,

    logical_xor

    执行元素级别的布尔逻辑运算,相当于中缀运算符&、|、^

    聚合函数

    1. 聚合函数是对一组值(比如一个数组)进行操作,返回一个单一值作为结果的函数。因此求数组所有元素之和、求所有元素的最大最小值以及标准差的函数就是聚合函数

    arr.max()  arr.min()  arr.mean() 

    arr.std()标准差,相当于np.sqrt(np.power(arr-arr.mean(),2).sum()/arr.size)

     2. 聚合函数可以指定对数值的某个轴元素进行操作

    arr.mean(axis=0)对每一列取均值    arr.mean(axis=1)对每一行取均值

    axis=0时对同一列上的元素进行聚合 axis=1时对同一行上的元素进行聚合

    np.where函数

    1. np.where函数是三元表达式x if condition else y 的矢量化版本

     1 import numpy as np
     2 xarr=np.array([1.1,1.2,1.3,1.4,1.5])
     3 yarr=np.array([2.1,2.2,2.3,2.4,2.5])
     4 condition=np.array([True,False,True,True,False])
     5 result=[(x if c else y) for x,y,c in zip(xarr,yarr,condition)]
     6 result
     7 # 输出 [1.1, 2.2, 1.3, 1.4, 2.5]
     8 result2=np.where(condition,xarr,yarr)
     9 result2
    10 # 输出 array([1.1, 2.2, 1.3, 1.4, 2.5])

    2. 案例:将数组中所有NaN缺失值替换为0

     1 import numpy as np
     2 arr=np.array([[1,2,np.NaN,4],[3,4,5,np.NaN]])
     3 arr
     4 #  输出array([[ 1.,  2., nan,  4.],
     5              [ 3.,  4.,  5., nan]])
     6 np.isnan(arr)
     7 # 输出array([[False, False,  True, False],
     8             [False, False, False,  True]])
     9 np.where(np.isnan(arr),0,arr)
    10 # 输出array([[1., 2., 0., 4.],
    11            [3., 4., 5., 0.]])

    np.unique函数

    求数组中不重复的元素

    1 import numpy as np
    2 pd=np.array(['图书','数码','小吃','美食','男装','美食','女装','小吃'])
    3 np.unique(pd)
    4 # 输出 array(['图书', '女装', '小吃', '数码', '男装', '美食'], dtype='<U2')

    数组数据文件读写

    1. 将数组以二进制格式保存到磁盘

     1 import numpy as np
     2 data = np.array([[1,2,3,4],[2,3,4,5],[6,7,8,9],[2,3,4,6]])
     3 data
     4 # 输出 array([[1, 2, 3, 4],
     5              [2, 3, 4, 5],
     6              [6, 7, 8, 9],
     7              [2, 3, 4, 6]])
     8 np.save('data',data)  # 将多维数组存储到文件,自动添加后缀.npy (二进制文件)
     9 np.load('data.npy')  # 读取文件需要添加对应的后缀
    10 # 输出 array([[1, 2, 3, 4],
    11              [2, 3, 4, 5],
    12              [6, 7, 8, 9],
    13              [2, 3, 4, 6]])

    2. 存取文本文件

     1 import numpy as np
     2 exp = np.loadtxt('example.csv',delimiter=',')
     3 exp
     4 # 输出array([[1., 2., 3., 4.],
     5             [2., 4., 5., 7.],
     6             [4., 1., 5., 9.]])
     7 
     8 np.genfromtxt('example.csv',delimiter=',')
     9 # 输出array([[1., 2., 3., 4.],
    10             [2., 4., 5., 7.],
    11             [4., 1., 5., 9.]])
    12   

    3. 数据写入文本文件

    1 import numpy as np
    2 np.savetxt('arr.csv',exp.reshape((2,6)),delimiter=',',fmt='%.2f')
    3 exp2=np.random.random((2,3,4))
    4 # 如果数组为二维以上的数组,则必须转换为二维数组才能进行存储,否则一定会出错
    5 np.savetxt('arr1.csv',arr3.reshape((4,6)),delimiter=',')
  • 相关阅读:
    继承
    iOS 适配暗黑模式
    【C++ STL】容器的选择
    纳税相关
    SwiftUI状态绑定:@State
    python 中各种容器可以容纳的数据类型
    open GL 在使用材质属性glMaterial设置物体颜色效果时,使用shader和使用固定管线后颜色区别
    做为一名测试工程师,你经常会用到或听到的那些工具
    推荐一款技术人必备的接口测试神器:Apifox
    测试管理工具推荐
  • 原文地址:https://www.cnblogs.com/yang901112/p/11385646.html
Copyright © 2011-2022 走看看