设为首页 加入收藏

TOP

Python str、list、numpy分片操作(二)
2018-03-02 06:57:11 】 浏览:390
Tags:Python str list numpy 分片 操作
;>> arr2d[:, 1:2]  # 取所有行的第一列元素(列索引从0开始)
array([[2],
      [5],
      [8]])
>>> arr2d[1, :2]  # 取第一行的前两列的元素元素
array([4, 5])
>>> arr2d[2, :1]  # 取第二行的第零列元素
array([7])
>>> arr2d[:, :1]  # 取所有行的第零列元素
array([[1],
      [4],
      [7]])
>>> arr2d[:, 1:] = 0  # 同样,分片表达式的赋值操作也会扩散到源数据
>>> arr2d
array([[1, 0, 0],
      [4, 0, 0],
      [7, 0, 0]])


布尔型索引


假设我们有一个用于存储数据的数组以及一个存储姓名的数组(含有重复项)。


>>> import numpy as np
>>> from numpy.random import randint
>>> names = np.array(['Bob', 'Joe', 'Bob', 'Will', 'Will', 'Joe', 'Joe', 'Bob'])
>>> data = randint(6, size=(8, 4))
>>> data
array([[2, 1, 2, 2],
      [3, 3, 4, 2],
      [0, 5, 3, 5],
      [2, 1, 5, 2],
      [1, 3, 0, 3],
      [0, 0, 0, 1],
      [0, 0, 0, 5],
      [4, 2, 5, 1]])


假设每个名字都对应data数组中的一行,而我们想要选出对应于名字“Bob”的所有行。我们可以这样操作


>>> names == 'Bob'
array([ True, False,  True, False, False, False, False,  True], dtype=bool)
>>> data[names == 'Bob']
array([[2, 1, 2, 2],
      [0, 5, 3, 5],
      [4, 2, 5, 1]])


布尔型数组的长度必须跟被索引的数组长度一致,此外,还可以将布尔型数组跟分片、整数(或整数序列)混合使用


>>> data[names == 'Bob', 2:]
array([[2, 2],
      [3, 5],
      [5, 1]])
>>> data[names == 'Bob', 3]
array([2, 5, 1])
>>> data[names == 'Bob', 3:]
array([[2],
      [5],
      [1]])


如果需要选取多个名字组合需要组合多个布尔条件,使用&(和)、|(或)之类的布尔算术运算符即可:


>>> mask = (names == 'Bob') | (names == 'Will')
>>> mask
array([ True, False,  True,  True,  True, False, False,  True], dtype=bool)
>>> data[mask]
array([[2, 1, 2, 2],
      [0, 5, 3, 5],
      [2, 1, 5, 2],
      [1, 3, 0, 3],
      [4, 2, 5, 1]])


注意:Python关键字and和or在布尔型数据中无效


通过布尔型数组设置值是一种经常用到的手段,为了将data中所有的偶数设置为3,我们只需:


>>> data
array([[2, 1, 2, 2],
      [3, 3, 4, 2],
      [0, 5, 3, 5],
      [2, 1, 5, 2],
      [1, 3, 0, 3],
      [0, 0, 0, 1],
      [0, 0, 0, 5],
      [4, 2, 5, 1]])
>>> data[data % 2 == 0] = 3
>>> data
array([[3, 1, 3, 3],
      [3, 3, 3, 3],
      [3, 5, 3, 5],
      [3, 1, 5, 3],
      [1, 3, 3, 3],
      [3, 3, 3, 1],
      [3, 3, 3, 5],
      [3, 3, 5, 1]])


花式索引


花式索引是numpy术语,它指的是利用整数数组进行索引。假设我们有一个8×4数组:


>>> arr = np.empty((8, 4))
>>> for i in range(8):
...    arr[i] = i
...
>>> arr
array([[ 0.,  0.,  0.,  0.],
      [ 1.,  1.,  1.,  1.],
      [ 2.,  2.,  2.,  2.],
      [ 3.,  3.,  3.,  3.],
      [ 4.,  4.,  4.,  4.],
      [ 5.,  5.,  5.,  5.],
      [ 6.,  6.,  6.,  6.],
      [ 7.,  7.,  7.,  7.]])
>>> arr[[3, 5, 0, 6]]
array([[ 3.,  3.,  3.,  3.],
      [ 5.,  5.,  5.,  5.],
&

首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇Python中bisect的使用方法 下一篇Python中__str__和__repr__的区别

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目