zoukankan      html  css  js  c++  java
  • numpy基础2索引和切片

      1 # coding: utf-8
      2 # numpy数组基础索引与切片
      3 
      4 import numpy as np
      5 arr = np.arange(10)
      6 arr
      7 
      8 # 数组下标从0开始
      9 # 索引
     10 arr[5]
     11 # 切片
     12 arr[5:8]
     13 # 传入数值给数组切片
     14 arr[5:8] = 12
     15 arr
     16 # 数组的切片是原数组的视图,任何对于视图的修改都会反映到原数组上
     17 arr_slice = arr[5:8]
     18 arr_slice
     19 # 改变arr_slice,变化会体现在原数组上
     20 arr_slice[1] = 12345
     21 arr
     22 
     23 # 不写切片值的[:]将会引用数组的所有值
     24 arr_slice[:] = 64
     25 arr
     26 # 在二维数组中索引对应的值不再是一个值,而是一个一维数组,下标从0开始
     27 arr2d = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
     28 arr2d[2]
     29 # 获取单个元素值可以通过递归方式得到  两种方法
     30 # 方法1
     31 arr2d[0][2]
     32 #方法2
     33 arr2d[0, 2]
     34 # 在多维数组中可以省略后续索引值,返回对象将是一个降低一个维度的数组
     35 # 2x2x3的数组
     36 arr3d = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])
     37 arr3d
     38 # 返回2x3的数组
     39 arr3d[0]
     40 # 标量和数组都可以传递给arr3d[0]
     41 old_values = arr3d[0].copy()
     42 arr3d[0] = 42
     43 arr3d
     44 
     45 arr3d[0] = old_values
     46 arr3d
     47 #返回一维数组
     48 arr3d[1, 0]
     49 # 数组的切片索引
     50 # 一维数组
     51 arr
     52 arr[1:6]
     53 # 二维数组
     54 arr2d
     55 arr2d[:2]
     56 # 多组切片
     57 arr2d[:2, 1:]
     58 # 选择第二行且只选择前两列
     59 arr2d[1, :2]
     60 # 选择第三列且只选择前两行
     61 arr2d[:2, 2]
     62 # 单独冒号表示选择整个轴上的数组
     63 arr2d[:, :1]
     64 # 对切片表达式赋值,整个切片都会重新赋值
     65 arr2d[:2, 1:] = 0
     66 arr2d
     67 
     68 #  布尔索引
     69 #  例1.假设数据都在数组中,数组中数据是一些重复的人名,将使用numpy.random中的randn函数生成一些随机正态分布的数据
     70 names = np.array(['Bob', 'Joe', 'Will', 'Bob', 'Will', 'Joe', 'Joe'])
     71 names
     72 data = np.random.randn(7, 4)
     73 data
     74 # 假设每个人名都和data数组中的一行相对应,我们想要选中所有'Bob'对应的行。
     75 # 比较names数组和字符串数组'Bob'会产生一个布尔值数组
     76 names == 'Bob'
     77 # 在索引数组时可以传入布尔值数组
     78 data[names == 'Bob']
     79 data[names == 'Bob', 2:]
     80 data[names == 'Bob', 3]
     81 
     82 # 为了选择除'Bob'以外的其他数据,可以使用!=或在条件表达式前使用~对条件取反
     83 names != 'Bob'
     84 data[~(names == 'Bob')]
     85 
     86 # ~符号可以在你想要对一个通用条件进行取反时使用
     87 cond = names == 'Bob'
     88 data[~cond]
     89 
     90 #当要选择三个名字中的两个时,可以对多个布尔值条件进行联合,使用 & 和 |
     91 mask = (names == 'Bob')| (names == 'Will')
     92 mask
     93 data[mask]
     94 
     95 # 设置布尔数组的值,将data 中所有负值设置为0
     96 data[data < 0] = 0
     97 data
     98 
     99 # 利用一维布尔值数组对每一行设置数值
    100 data[names != 'Joe'] = 7
    101 data
    102 
    103 #  神奇索引,用于描述使用整数数组进行数据索引
    104 # 有一个8x4的数组
    105 arr = np.empty((8,4))
    106 for i in range(8):
    107     arr[i] = i
    108 arr
    109 
    110 # 选出符合特定顺序的子集
    111 arr[[4, 3, 0, 6]]
    112 
    113 # 使用负索引,从尾部进行选择
    114 arr[[-3, -5, -7]]
    115 
    116 arr = np.arange(32).reshape((8, 4))
    117 arr
    118 
    119 # 传递多个索引时,根据每个索引元组对应的元素选出一个一维数组
    120 arr[[1, 5, 7, 2],[0, 3, 1, 2]]
    121 
    122 arr[[1, 5, 7, 2]][:, [0, 3, 1, 2]]
    123 
    124 
    125 #  数组转置和换轴
    126 # 数组的T属性
    127 arr = np.arange(15).reshape((3, 5))
    128 arr
    129 arr.T
    130 
    131 # 计算矩阵内积np.dot
    132 arr = np.random.randn(6, 3)
    133 arr
    134 np.dot(arr.T, arr)
    135 
    136 # 对于高维数组,transpose方法可以接受包含轴编号的元组,用于置换轴
    137 arr = np.arange(16).reshape((2, 2, 4))
    138 arr
    139 
    140 # 原先的第二个轴变为第一个,第一个变为第二个轴
    141 arr.transpose((1, 0, 2))
    142 
    143 # swapaxes方法,接收一对轴编号作为参数,并对轴进行调整用于重组数据
    144 arr
    145 arr.swapaxes(1, 2)

    参考书籍:利用 python 进行数据分析

    作者:舟华520

    出处:https://www.cnblogs.com/xfzh193/

    本文以学习,分享,研究交流为主,欢迎转载,请标明作者出处!

  • 相关阅读:
    c++——类 继承
    Pytorch Tensor, Variable, 自动求导
    Python-OpenCV实现二值图像孔洞填充
    神经网络手写数字识别numpy实现
    神经网络反向传播公式推导
    转:Markdown语法大全
    markdown居中对齐,左对齐,右对齐
    硬编码与软编码
    转:Markdown数学公式语法
    Python if __name__=='__main__'
  • 原文地址:https://www.cnblogs.com/xfzh193/p/11222686.html
Copyright © 2011-2022 走看看