• ndnarry矩阵处理


    ndarray的矩阵运算

    数组是编程中的概念,矩阵、矢量是数学概念。

    在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义!

    1. 矢量运算:相同大小的数组间运算应用在元素上

    示例代码(1):

    # 矢量与矢量运算
    arr = np.array([[1, 2, 3],
                    [4, 5, 6]])
    
    print("元素相乘:")
    print(arr * arr)
    
    print("矩阵相加:")
    print(arr + arr)

    运行结果:

    元素相乘:
    [[ 1  4  9]
     [16 25 36]]
    
    矩阵相加:
    [[ 2  4  6]
     [ 8 10 12]]

    2. 矢量和标量运算:"广播" - 将标量"广播"到各个元素

    示例代码(2):

    # 矢量与标量运算
    print(1. / arr)
    print(2. * arr)

    运行结果:

    [[ 1.          0.5         0.33333333]
     [ 0.25        0.2         0.16666667]]
    
    [[  2.   4.   6.]
     [  8.  10.  12.]]

    ndarray的索引与切片

    1. 一维数组的索引与切片

    与Python的列表索引功能相似

    示例代码(1):

    # 一维数组
    arr1 = np.arange(10)
    print(arr1)
    print(arr1[2:5])
    

    运行结果:

    [0 1 2 3 4 5 6 7 8 9]
    [2 3 4]

    2. 多维数组的索引与切片:

    arr[r1:r2, c1:c2]

    arr[1,1] 等价 arr[1][1]

    [:] 代表某个维度的数据

    示例代码(2):

    # 多维数组
    arr2 = np.arange(12).reshape(3,4)
    print(arr2)
    
    print(arr2[1])
    
    print(arr2[0:2, 2:])
    
    print(arr2[:, 1:3])

    运行结果:

    [[ 0  1  2  3]
     [ 4  5  6  7]
     [ 8  9 10 11]]
    
    [4 5 6 7]
    
    [[2 3]
     [6 7]]
    
    [[ 1  2]
     [ 5  6]
     [ 9 10]]

    3. 条件索引

    布尔值多维数组:arr[condition],condition也可以是多个条件组合。

    注意,多个条件组合要使用 & | 连接,而不是Python的 and or。

    示例代码(3):

    # 条件索引
    
    # 找出 data_arr 中 2005年后的数据
    data_arr = np.random.rand(3,3)
    print(data_arr)
    
    year_arr = np.array([[2000, 2001, 2000],
                         [2005, 2002, 2009],
                         [2001, 2003, 2010]])
    
    is_year_after_2005 = year_arr >= 2005
    print(is_year_after_2005, is_year_after_2005.dtype)
    
    filtered_arr = data_arr[is_year_after_2005]
    print(filtered_arr)
    
    #filtered_arr = data_arr[year_arr >= 2005]
    #print(filtered_arr)
    
    # 多个条件
    filtered_arr = data_arr[(year_arr <= 2005) & (year_arr % 2 == 0)]
    print(filtered_arr)

    运行结果:

    [[ 0.53514038  0.93893429  0.1087513 ]
     [ 0.32076215  0.39820313  0.89765765]
     [ 0.6572177   0.71284822  0.15108756]]
    
    [[False False False]
     [ True False  True]
     [False False  True]] bool
    
    [ 0.32076215  0.89765765  0.15108756]
    
    #[ 0.32076215  0.89765765  0.15108756]
    
    [ 0.53514038  0.1087513   0.39820313]

    ndarray的维数转换

    二维数组直接使用转换函数:transpose()

    高维数组转换要指定维度编号参数 (0, 1, 2, …),注意参数是元组

    示例代码:

    arr = np.random.rand(2,3)    # 2x3 数组
    print(arr)    
    print(arr.transpose()) # 转换为 3x2 数组
    
    
    arr3d = np.random.rand(2,3,4) # 2x3x4 数组,2对应0,3对应1,4对应3
    print(arr3d)
    print(arr3d.transpose((1,0,2))) # 根据维度编号,转为为 3x2x4 数组

    运行结果:

    # 二维数组转换
    # 转换前:
    [[ 0.50020075  0.88897914  0.18656499]
     [ 0.32765696  0.94564495  0.16549632]]
    
    # 转换后:
    [[ 0.50020075  0.32765696]
     [ 0.88897914  0.94564495]
     [ 0.18656499  0.16549632]]
    # 高维数组转换
    # 转换前:
    [[[ 0.91281153  0.61213743  0.16214062  0.73380458]
      [ 0.45539155  0.04232412  0.82857746  0.35097793]
      [ 0.70418988  0.78075814  0.70963972  0.63774692]]
    
     [[ 0.17772347  0.64875514  0.48422954  0.86919646]
      [ 0.92771033  0.51518773  0.82679073  0.18469917]
      [ 0.37260457  0.49041953  0.96221477  0.16300198]]]
    
    # 转换后:
    [[[ 0.91281153  0.61213743  0.16214062  0.73380458]
      [ 0.17772347  0.64875514  0.48422954  0.86919646]]
    
     [[ 0.45539155  0.04232412  0.82857746  0.35097793]
      [ 0.92771033  0.51518773  0.82679073  0.18469917]]
    
     [[ 0.70418988  0.78075814  0.70963972  0.63774692]
      [ 0.37260457  0.49041953  0.96221477  0.16300198]]]
     
  • 相关阅读:
    计算中文混合字符串长度(一)
    PHP截取含中文的混合字符串长度的函数
    获取星座的JS函数
    获取生日对应星座的PHP函数
    简单的 jQuery 浮动层随窗口滚动滑动插件实例
    MD5算法实现
    70. Climbing Stairs QuestionEditorial Solution
    167. Two Sum II
    167. Two Sum II
    303. Range Sum Query
  • 原文地址:https://www.cnblogs.com/alexzhang92/p/9792747.html
Copyright © 2020-2023  润新知