NumPy索引切片

索引,切片和迭代

一维数组可以被索引,切片和迭代,就像 列表 和其他Python序列一样。

代码实例解析数组中的索引切片
>>> import numpy as np   #导入numpy  别名为np>>> a = np.arange(10)**3>>> aarray([  0,   1,   8,  27,  64, 125, 216, 343, 512, 729])>>> a[2]                                  #数组的索引从下标0开始8>>> a[2:5]                               #数组的索引包含首不包含尾array([ 8, 27, 64])>>> a[:6:2] = -1000    # 指索引[0:6]步长为2的值都赋值为1000>>> aarray([-1000,     1, -1000,    27, -1000,   125,   216,   343,   512,   729])>>> a[ : :-1]                                   # 将 a  逆序array([  729,   512,   343,   216,   125, -1000,    27, -1000,     1, -1000])>>> for i in a:...     print(i**(1/3.))...nan1.0nan 3.0nan5.06.07.08.09.0

多维数组每个轴可以有一个索引。这些索引以逗号分隔的元组给出:

>>> def f(x,y):...     return 10*x+y                     #这里定义了一个生成方法...>>> b = np.fromfunction(f,(5,4),dtype=int) #fromfunction(函数名,shape,dtype)生成一个数组>>> barray([[ 0,  1,  2,  3],       [10, 11, 12, 13],       [20, 21, 22, 23],       [30, 31, 32, 33],       [40, 41, 42, 43]])>>> b[2,3]           #索引第二行第三列的值,数组的索引从下标0开始23>>> b[0:5, 1]                        # ‘,‘前面是行维度,后是列维度array([ 1, 11, 21, 31, 41])          #这里表示所有行的第一类>>> b[ : ,1]                        # 同上array([ 1, 11, 21, 31, 41])>>> b[1:3, : ]                      # 一行和二行的所有列array([[10, 11, 12, 13],       [20, 21, 22, 23]])#当提供的索引少于轴的数量时,缺失的索引被认为是完整的切片:>>> b[-1]                                  # 等价于b[-1,:]array([40, 41, 42, 43])?

括号内的表达式b[i]被视为一个i 后跟尽可能多的实例:来表示剩余的轴。NumPy还允许你用点来写这个 b[i,...]

...根据需要,以产生一个完整的索引元组)表示为许多冒号。例如,if x是一个包含5个轴的数组,那么

  • x[1,2,...]相当于x[1,2,:,:,:]
  • x[...,3]x[:,:,:,:,3]
  • x[4,...,5,:]x[4,:,:,5,:]
  • ps:省略号自然是省略的意思,所以是省略一坨咯

    可以看看下面的代码实例

>>> c = np.array( [[[  0,  1,  2],               #生成一个三维数组...                 [ 10, 12, 13]],...                [[100,101,102],...                 [110,112,113]]])>>> c.shape     #返回该数组的形状(2, 2, 3)>>> c[1,...]                                   #横的第1坨 剩下的省略不要 array([[100, 101, 102],       [110, 112, 113]])>>> c[...,2]                                   # 竖的第二列全部,省略的一坨对不起,俺们不要array([[  2,  13],       [102, 113]])对多维数组进行迭代是针对第一个轴完成的:    (就是按行开始便利么)>>>>>> 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]#但是,如果想要对数组中的每个元素执行操作,可以使用flat属性 作为数组的所有元素的 迭代器:#当便利的元素有时候特别特别小时可以通过指定dtype属性为complex来解决>>>>>> for element in b.flat:   #(b这个矩阵的flat属性,可以当作是化身为一维数组的形式内包含所有的元素的一个列表就ok了,记住仅仅是当作)...     print(element)...012310111213202122233031323340414243 

形状操纵

改变数组的形状

#这里给出一个数组三行四列的二维数组#floor:小于这个元素的最大整数值?>>> a = np.floor(10*np.random.random((3,4)))>>> aarray([[ 2.,  8.,  0.,  6.],       [ 4.,  5.,  1.,  1.],       [ 8.,  9.,  3.,  6.]])>>> a.shape(3, 4)

可以使用各种命令更改阵列的形状。请注意,以下三个命令都返回已修改的数组,但不更改原始数组:

>>> a.ravel()  # 返回一个数组列表相当于奥特曼变身和flat差不多array([ 2.,  8.,  0.,  6.,  4.,  5.,  1.,  1.,  8.,  9.,  3.,  6.])>>> a.reshape(6,2)  #不改变数组元素,返回一个shape形状的数组,原数组不变#哦我的天,快看出现一个6行2列的二维数组array([[ 2.,  8.],       [ 0.,  6.],       [ 4.,  5.],       [ 1.,  1.],       [ 8.,  9.],       [ 3.,  6.]])>>> a.T  # 卡布达变身 行列交换 array([[ 2.,  4.,  8.],  #原来的0列变成0行 以此类推       [ 8.,  5.,  9.],       [ 0.,  1.,  3.],       [ 6.,  1.,  6.]])>>> a.T.shape # (3,4) 变(4,3)这里指返回变身后的形状 (4, 3)>>> a.shape(3, 4)

由ravel()产生的数组中元素的顺序通常是“C风格”,也就是说,最右边的索引“变化最快”,因此[0,0]之后的元素是[0,1] 。如果将数组重新整形为其他形状,则该数组将被视为“C风格”。NumPy通常创建按此顺序存储的数组,因此ravel()通常不需要复制其参数,但如果数组是通过获取另一个数组的切片或使用不常见的选项创建的,则可能需要复制它。还可以使用可选参数指示函数ravel()和reshape(),以使用FORTRAN样式的数组,其中最左边的索引变化最快。

flat只是一个可跌带的玩意 可以通过便利来查看 ravel则是真的返回一个一维数组

总结:

ps:1.选取一个维度用‘ : ‘2.每个维度切片方法与一维数组相同3.每个维度可以使用步长跳跃切片

原文地址:https://www.cnblogs.com/pythonyeyu/p/10665573.html

时间: 2024-09-30 03:03:02

NumPy索引切片的相关文章

乐哥学AI_Python(二):Numpy索引,切片,常用函数

Numpy的索引和切片 ndarray对象的内容可以通过索引和切片查看和修改. 索引:ndarray对象中的元素索引基于0开始 切片:对数组里某个片段区域的描述 数组的切片也可以理解为原始数组的局部视图,都是指向内存中的原始数组,所以不同于列表复制,切片上的修改都会直接反映到原始数组上. 索引切片的实例代码演示: Numpy常用函数的代码演示: Numpy的置换函数transpose.T和swapaxes演示与区别 T适用于一.二维数组 arr = np.arange(12).reshape(3

Python array,list,dataframe索引切片操作 2016年07月19日——智浪文档

array,list,dataframe索引切片操作 2016年07月19日——智浪文档 list,一维,二维array,datafrme,loc.iloc.ix的简单探讨 Numpy数组的索引和切片介绍: 从最基础的list索引开始讲起,我们先上一段代码和结果: a = [0,1,2,3,4,5,6,7,8,9] a[:5:-1] #step < 0,所以start = 9 a[0:5:-1] #指定了start = 0 a[1::-1] #step < 0,所以stop = 0 输出: [

吴裕雄--天生自然TensorFlow2教程:numpy [ ] 索引

import tensorflow as tf a = tf.ones([1, 5, 5, 3]) a.shape a[0][0] numpy : 索引 a = tf.random.normal([4, 28, 28, 3]) a.shape a[1].shape a[1, 2].shape a[1][2][3].shape a[1, 2, 3, 2].shape 一维切片 a = tf.range(10) a a[-1:] a[-2:] a[:2] a[:-1] 多维切片 a = tf.ran

5-字符串传值%s、format、索引切片、字符串处理

%s 传入变量值string %d 传入变量值为int %f  传入变量值为float format方式  或者 单引号 '   '                    单行 双引号 "  "                    单行 三引号 """     """           多行 索引,切片 print name[1:2]  #从第2个值开始,每隔一个值取一次 strip()去除字符串中的空格 strip('\

列表的初识,列表的索引切片,列表的增删改查,列表的嵌套,元组的初识,range

1 内容总览 列表的初识 列表的索引切片 列表的增删改查 列表的嵌套 元组的初识(了解) 元组的简单应用(了解) range 2 具体内容 列表的初识 why: str: 存储少量的数据.切片出来全都是str类型,存储的数据单一. list:能储存大量的数据.包含不同类型的数据.且有顺序,有规律,可自己制作设计其中的数据,可修改 what:list l1 = [100, 'alex',True,[1, 2, 3]] 可承载任意数据类型,存储大量的数据. python常用的容器型数据类型. 列表是

pytorch张量数据索引切片与维度变换操作大全(非常全)

(1-1)pytorch张量数据的索引与切片操作1.对于张量数据的索引操作主要有以下几种方式:a=torch.rand(4,3,28,28):DIM=4的张量数据a(1)a[:2]:取第一个维度的前2个维度数据(不包括2):(2)a[:2,:1,:,:]:取第一个维度的前两个数据,取第2个维度的前1个数据,后两个维度全都取到:(3)a[:2,1:,:,:]:取第一个维度的前两个数据,取第2个维度的第1个索引到最后索引的数据(包含1),后两个维度全都取到:(4)a[:2,-3:]:负号表示第2个维

python之路-利用索引切片功能做一个简易的两个未知数的加法计算器,代码如下:

python之路-利用索引切片功能做一个简易的两个未知数的加法计算器,代码如下: #content = input('请输入内容:'),如用户输入:5 +9或 5 + 9 等,然后进行分割再进行计算. content = input('>>>').strip() #content 等于所输入的内容,strip:删除字符串左右两边的空格. index = content.find('+') ''' content内容中的两边的空格都删除了,但中间还有,现在我们只需要定位已知内容是加法,两边

数据分析2 numpy(ndarray数组,属性,创建,索引切片,运算,函数,随机数), Pandas(Series创建,缺失值处理,特性,索引,DataFrame)

Numpy numpy数据类型 1.为啥使用numpy ? ndarray是一个多维数组列表 Numpy的核心特征就是N-维数组对----ndarray 它和python中的列表区别: 1.数组对象内元素类型必须相同 2.数组大小不可修改 2.创建ndarray     数组 3.常见的属性 数据类型 astype()方法可以修改数组类型 4.ndarray的创建方式 5.索引 6.切片 7.数组的向量运算和矢量运算 8. 布尔型索引 9.花式索引 10.一元函数 11.数学统计函数 12.随机

numpy 索引,切片 ,转置,变值,多个数组的拼接

原文地址:https://www.cnblogs.com/cgy1995/p/9901792.html