科学计算工具NumPy(2):ndarray的矩阵处理

举报
DrugAI 发表于 2021/07/15 01:36:00 2021/07/15
【摘要】 科学计算工具NumPy(1):ndarray的创建于数据类型 科学计算工具NumPy(2):ndarray的矩阵处理 科学计算工具NumPy(3):ndarray的元素处理 ndarray的矩阵运算 数组是编程中的概念,矩阵、矢量是数学概念。 在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义! 1. 矢量运算:相同大小的数组间运算应用在元素...

科学计算工具NumPy(1):ndarray的创建于数据类型

科学计算工具NumPy(2):ndarray的矩阵处理

科学计算工具NumPy(3):ndarray的元素处理

ndarray的矩阵运算

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

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

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. 矢量和标量运算:"广播" - 将标量"广播"到各个元素


      # 矢量与标量运算
      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的列表索引功能相似


      # 一维数组
      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]

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


      # 多维数组
      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


      # 条件索引
      # 找出 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对应03对应14对应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]]]
  
 

参考资料

 

文章来源: drugai.blog.csdn.net,作者:DrugAI,版权归原作者所有,如需转载,请联系作者。

原文链接:drugai.blog.csdn.net/article/details/104268849

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。