NumPy生成自定义数组
Marsh 摸不到门

特殊数组的创建方法

  • numpy.arange 生成数值范围

    numpy.arange(start, stop, step, dtype)
  • numpy.linspace 生成等差数列

    np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)
  • numpy.logspace 生成等比数列

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
  • np.zeros 全0数组

    np.zeros(6)                      # 默认是浮点型
  • np.ones全1数组

    np.ones((3, 2))                  # 三行两列
  • 随机数组:rand生成服从01分布的随机数

    np.random.rand(5)                # 返回服从01分布的5个数
  • 随机数组:randn生成标准正态分布的随机数

    np.random.randn(5) 
  • 随机数组:normal生成元素是指定随机分布的数组

    np.random.normal(4, 2, (3,3))   
    
    array([[ 5.53705005,  1.95477989,  3.07768639],       
            [ 4.15457427,  3.69587242,  3.18715934],       
            [ 5.46093734,  6.60888084, -0.55980278]])
  • 生成全数值相同的数组

    np.full((2, 2), 3)
  • np.eye生成单位矩阵

    np.eye(5)
    
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])
    ```       
    - np.diag生成对角矩阵
    ```python
    np.diag([1, 2, 3])
    
    array([[1, 0, 0],
           [0, 2, 0],
           [0, 0, 3]])
    ```       
    - np.array按照某种形状生成ndarray
    ```python
    e = [[2,1,3],[4,3,2]]
    np.array(e)
    
    array([[2, 1, 3],
           [4, 3, 2]])
    
    np.ones_like(e)
    np.zeros_like(e)
    np.full_like(e,5)

数组常用变形方法

  • reshape方法:调整数组行列结构
    a1 = np.random.rand(2, 3)
    a1
    array([[0.56262855, 0.73129141, 0.86289312],
           [0.93186546, 0.93884182, 0.22485166]])
  • flatten方法:将数组降为一维数组
    a1.flatten().shape
    (6,)
  • .T方法:数组的转置
    a1
    array([[0.56262855, 0.73129141, 0.86289312],
           [0.93186546, 0.93884182, 0.22485166]])
    
    a1.T                    # 就类似于矩阵的转置
    array([[0.56262855, 0.93186546],
           [0.73129141, 0.93884182],
           [0.86289312, 0.22485166]])

数组的拼接

a1 = np.array([[1, 2], [3, 4]])
a2 = np.array([[5, 6], [7, 8]])

(array([[1, 2],
        [3, 4]]),
 array([[5, 6],
        [7, 8]]))
```        

- vstack:纵向拼接,按列拼接,新增行,上下拼接

```python
np.vstack([a1, a2])             # 需要输入一个序列
array([[1, 2],
       [3, 4],
       [5, 6],
       [7, 8]])
  • hstack:横向拼接,按行拼接,新增列,左右拼接
np.hstack([a1, a2]) 
array([[1, 2, 5, 6],
       [3, 4, 7, 8]])

数组的切分

当然,有拼接就有切分。接下来,简单看下数组的切分方法。拼接时关键字是stack,切分时关键字是split

a = np.arange(24).reshape(3,8)          # 创建3行8列的二维数组
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]])
  • hsplit:左右切分
    # 当第二个参数只输入一个数时,是进行等分
    np.hsplit(a,2)
    
    [array([[ 0,  1,  2,  3],
            [ 8,  9, 10, 11],
            [16, 17, 18, 19]]),
     array([[ 4,  5,  6,  7],
            [12, 13, 14, 15],
            [20, 21, 22, 23]])]
    # 无法等分的情况会报错
    np.hsplit(a,3)
    ````
    ```python
    # 当第二个参数输入一个序列时,则是根据列标进行切分
    np.hsplit(a,(1,2,3))          # 第一列、第二列、第三列后进行切分
    
    [array([[ 0],
            [ 8],
            [16]]),
     array([[ 1],
            [ 9],
            [17]]),
     array([[ 2],
            [10],
            [18]]),
     array([[ 3,  4,  5,  6,  7],
            [11, 12, 13, 14, 15],
            [19, 20, 21, 22, 23]])]
    - vsplit:上下切分
    ```python
    np.vsplit(a,3)                # 三等分
    
    [array([[0, 1, 2, 3, 4, 5, 6, 7]]),
     array([[ 8,  9, 10, 11, 12, 13, 14, 15]]),
     array([[16, 17, 18, 19, 20, 21, 22, 23]])]
  • array_split:通用切分方法
    # 均分
    np.array_split(a, 2, axis=1)        # axis = 1,左右切分
    
    [array([[ 0,  1,  2,  3],
            [ 8,  9, 10, 11],
            [16, 17, 18, 19]]),
     array([[ 4,  5,  6,  7],
            [12, 13, 14, 15],
            [20, 21, 22, 23]])]
    # 根据列标进行切分
    np.array_split(a, (1, ), axis=1)
    
    [array([[ 0],
            [ 8],
            [16]]),
     array([[ 1,  2,  3,  4,  5,  6,  7],
            [ 9, 10, 11, 12, 13, 14, 15],
            [17, 18, 19, 20, 21, 22, 23]])]
    # 均分
    np.array_split(a, 3, axis=0)         # axis = 0,上下切分
    
    [array([[0, 1, 2, 3, 4, 5, 6, 7]]),
     array([[ 8,  9, 10, 11, 12, 13, 14, 15]]),
     array([[16, 17, 18, 19, 20, 21, 22, 23]])]
    # 根据行标进行切分
    np.array_split(a, (1, ), axis=0)
    
    [array([[0, 1, 2, 3, 4, 5, 6, 7]]),
     array([[ 8,  9, 10, 11, 12, 13, 14, 15],
            [16, 17, 18, 19, 20, 21, 22, 23]])]

数组的算数运算

数学运算函数 描述
np.add(x1,x2 ) 按元素添加参数,等效于 x1 + x2
np.subtract(x1,x2) 按元素方式减去参数,等效于x1 - x2
np.multiply(x1,x2) 逐元素乘法参数,等效于x1 * x2
np.divide(x1,x2) 逐元素除以参数,等效于x1 / x2
np.exp(x) 计算e的x次方。
np.exp2(x) 计算2的x次方。
np.power(x1,x2) 计算x1的x2次幂。
np.mod(x) 返回输入数组中相应元素的除法余数.
np.log(x) 自然对数,逐元素。
np.log2(x) x的基础2对数。
np.log10(x) 以元素为单位返回输入数组的基数10的对数。
np.expm1(x) 对数组中的所有元素计算exp(x) - 1
np.log1p(x) 返回一个加自然对数的输入数组。
np.sqrt(x) 按元素方式返回数组的正平方根。
np.square(x) 返回输入的元素平方。
np.sin(x) 三角正弦。
np.cos(x) 元素余弦。
np.tan(x) 逐元素计算切线。
np.round(x) 四舍五入
np.floor(x) 向下取整
np.ceil(x) 向上取整
数组的统计运算
NumPy有很多有用的统计函数,用于从数组中给定的元素中查找最小,最大,百分标准差和方差等。
常用统计函数:
函数名称 NaN安全版本 描述
np.sum() np.nansum() 计算元素的和
np.min() np.nanmin() 找出最小值
np.max() np.nanmax() 找出最大值
np.prod() np.nanprod() 计算元素的积
np.ptp() N/A 计算元素的极差(最大值 - 最小值)
np.mean() np.nanmean() 计算元素的算术平均值
np.std() np.nanstd() 计算标准差
np.var() np.nanvar() 计算方差
np.percentile() np.nanpercentile() 计算百分位数
np.median() np.nanmedian() 计算中位数
np.average() N/A 返回数组的加权平均值
np.any() N/A 验证任何一个元素是否为真
np.all() N/A 验证所有元素是否为真

数组的线性代数函数

NumPy拥有numpy.linalg 模块,提供线性代数所需的所有功能。

  • np.dot() 返回两个数组的点积
  • np.vdot() 返回两个向量的点积
  • np.inner() 返回一维数组的向量内积
  • np.matmul() 返回两个数组的矩阵乘积
  • np.linalg.det() 计算输入矩阵的行列式
  • np.linalg.solve() 求解矩阵形式的线性方程的解
  • np.linalg.inv() 计算矩阵的逆

Pandas-DataFrame的创建

df = pd.DataFrame(data=None, 
                  index=None, 
                  columns=None,
                  dtype=None, 
                  copy=False
                  )

由Series创建DataFrame

s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([2, 3, 4], index=['b', 'c', 'd'])
df = pd.DataFrame([s1, s2])

二维array创建DataFrame

l = [[1, 2, 3], [2, 3, 4]]
pd.DataFrame(a)

利用字典创建DataFrame

d1 = {'a':range(3),'b':range(3),'c':range(3)}
pd.DataFrame(d1)

在创建过程中,字典的Key会编程column名称,并且系统会自动生成index.

 评论