NumPy 索引 迭代 Resheap
2016-05-29 11:02
369 查看
原文地址:http://blog.csdn.net/lsjseu/article/details/20359201
在原文基础上适当精简并更正少量原作者的笔误:
索引,切片和迭代
1. 一维数组可以被索引、切片和迭代,就像列表和其它Python序列。
2. 多维数组可以每个轴有一个索引。这些索引由一个逗号分割的元组给出。
3. 当少于轴数的索引被提供时,确失的索引被认为是整个切片:
4. b[i] 中括号中的表达式被当作 i 和一系列 : ,来代表剩下的轴。NumPy也允许你使用“.”Example: b[i,...] 。
点(...)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么:
x[1,2,…] 等同于x[1,2,:,:,:],
x[…,3] 等同于 x[:,:,:,:,3]
x[4,…,5,:] 等同 x[4,:,:,5,:].
5. 迭代多维数组是就第一个轴而言的,即按行操作:
6. 然而,如果想对数组中每一个元素进行运算,我们可以使用flat属性,该属性是数组元素的一个迭代器:
7. 更改数组的形状
一个数组的形状由它每个轴上的元素个数给出:
8. 一个数组的形状可以被多种命令修改:
9. 由 ravel()展平的数组元素的顺序通常是“C风格”的,就是说,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。如果数组被改变形状(reshape)成其它形状,数组仍然是“C风格”的。NumPy通常创建一个以这个顺序保存数据的数组。函数
reshape() 和 ravel() 还可以被同过一些可选参数构建成FORTRAN风格的数组,即最左边的索引变化最快。
10. reshape函数改变参数形状并返回它,而
resize函数改变数组自身。
如果在改变形状操作中一个维度被赋值为-1,其维度将自动被计算。
在原文基础上适当精简并更正少量原作者的笔误:
索引,切片和迭代
1. 一维数组可以被索引、切片和迭代,就像列表和其它Python序列。
>>> a =arange(10)**3 >>> a array([ 0, 1, 8, 27, 64, 125, 216, 343, 512, 729]) >>> a[2] 8 >>> a[2:5] array([ 8, 27, 64]) >>>a[:6:2] = -1000 # equivalent toa[0:6:2] = -1000; from start to position 6, exclusive, set every 2nd element to-1000 >>> a array([-1000, 1, -1000, 27, -1000, 125, 216, 343, 512, 729]) >>> a[ ::-1] #reversed a array([ 729, 512, 343, 216, 125, -1000, 27, -1000, 1, -1000]) >>> for i in a: ... print i**(1/3.), ... nan 1.0 nan 3.0 nan5.0 6.0 7.0 8.0 9.0
2. 多维数组可以每个轴有一个索引。这些索引由一个逗号分割的元组给出。
>>> def f(x,y): ... return 10*x+y ... >>> b =fromfunction(f,(5,4),dtype=int) >>> b array([[ 0, 1, 2, 3], [10, 11, 12, 13], [20, 21, 22, 23], [30, 31, 32, 33], [40, 41, 42, 43]]) >>> b[2,3] 23 >>> b[0:5,1] # each row in thesecond column of b array([ 1, 11, 21, 31, 41]) >>> b[ :,1] # equivalent to theprevious example array([ 1, 11, 21, 31, 41]) >>> b[1:3,: ] # each column inthe second and third row of b array([[10, 11, 12, 13], [20, 21, 22, 23]])
3. 当少于轴数的索引被提供时,确失的索引被认为是整个切片:
>>>b[-1] # the last row.Equivalent to b[-1,:] array([40, 41, 42,43])
4. b[i] 中括号中的表达式被当作 i 和一系列 : ,来代表剩下的轴。NumPy也允许你使用“.”Example: b[i,...] 。
点(...)代表许多产生一个完整的索引元组必要的分号。如果x是秩为5的数组(即它有5个轴),那么:
x[1,2,…] 等同于x[1,2,:,:,:],
x[…,3] 等同于 x[:,:,:,:,3]
x[4,…,5,:] 等同 x[4,:,:,5,:].
>>> c = array( [[[ 0, 1, 2], # a 3D array (two stacked 2D arrays) [ 10, 12, 13]], [[100, 101,102], [110, 112,113]] ] ) >>> c.shape (2, 2,3) >>> c[1,...] # same as c[1,:,:] or c[1] array([[100, 101, 102], [110, 112, 113]]) >>> c[...,2] # same as c[:,:,2] array([[ 2, 13], [102,113]])
5. 迭代多维数组是就第一个轴而言的,即按行操作:
>>> for row in b: ... print row [0 1 2 3] [10 11 12 13] [20 21 22 23] [30 31 32 33] [40 41 42 43]
6. 然而,如果想对数组中每一个元素进行运算,我们可以使用flat属性,该属性是数组元素的一个迭代器:
>>> for element inb.flat: ... print element, ... 0 1 2 3 10 11 12 1320 21 22 23 30 31 32 33 40 41 42 43
7. 更改数组的形状
一个数组的形状由它每个轴上的元素个数给出:
>>> a =floor(10*random.random((3,4))) >>> a array([[ 7., 5., 9., 3.], [ 7., 2., 7., 8.], [ 6., 8., 3., 2.]]) >>> a.shape (3, 4)
8. 一个数组的形状可以被多种命令修改:
>>> a.ravel() # flatten the array array([ 7., 5., 9., 3., 7., 2., 7., 8., 6., 8., 3., 2.]) >>> a.shape = (6,2) >>> a.transpose() # 转置 array([[ 7., 9., 7., 7., 6., 3.], [ 5., 3., 2., 8., 8., 2.]])
9. 由 ravel()展平的数组元素的顺序通常是“C风格”的,就是说,最右边的索引变化得最快,所以元素a[0,0]之后是a[0,1]。如果数组被改变形状(reshape)成其它形状,数组仍然是“C风格”的。NumPy通常创建一个以这个顺序保存数据的数组。函数
reshape() 和 ravel() 还可以被同过一些可选参数构建成FORTRAN风格的数组,即最左边的索引变化最快。
10. reshape函数改变参数形状并返回它,而
resize函数改变数组自身。
>>> a array([[ 7., 5.], [ 9., 3.], [ 7., 2.], [ 7., 8.], [ 6., 8.], [ 3., 2.]]) >>> a.resize((2,6)) >>> a array([[ 7., 5., 9., 3., 7., 2.], [ 7., 8., 6., 8., 3., 2.]])
如果在改变形状操作中一个维度被赋值为-1,其维度将自动被计算。
相关文章推荐
- Python动态类型的学习---引用的理解
- Python3写爬虫(四)多线程实现数据爬取
- 垃圾邮件过滤器 python简单实现
- 下载并遍历 names.txt 文件,输出长度最长的回文人名。
- install and upgrade scrapy
- Scrapy的架构介绍
- Centos6 编译安装Python
- 使用Python生成Excel格式的图片
- 让Python文件也可以当bat文件运行
- [Python]推算数独
- Python中zip()函数用法举例
- Python中map()函数浅析
- Python将excel导入到mysql中
- Python在CAM软件Genesis2000中的应用
- 使用Shiboken为C++和Qt库创建Python绑定
- FREEBASIC 编译可被python调用的dll函数示例
- Python 七步捉虫法