精华内容
下载资源
问答
  • 2022-05-05 14:32:23

    1、二维数组

    import numpy as np
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])
    #[[1 2 3]
     [4 5 6]
     [7 8 9]]
    
    #每个轴一个索引,当提供的索引数少于轴数时,缺少的索引将被视为完整切片,第一个数表示行,第二个数表示列,中间用逗号隔开
    
    a[0,1]      #2
    a[0:3,1]    #array([2, 5, 8])
    a[-1]       #array([7, 8, 9])
    a[:,-1]     #array([3, 6, 9])

    2、三维数据

    c = np.array([[(2,3,4),(5,6,7)],[(1,3,7),(9,5,3)]])
    ##[[[2 3 4]
      [5 6 7]]
    
     [[1 3 7]
      [9 5 3]]]
    
    c.shape    #(2, 2, 3)
    ##...表示生成完整索引元组所需的任意数量的冒号
    c[1,...]
    #array([[1, 3, 7],
           [9, 5, 3]])
    
    c[...,1]
    #array([[3, 6],
           [3, 5]])
    
    c[1,1,2]        #3
    
    c[:,0,:] 
    #array([[2, 3, 4],
           [1, 3, 7]])

    3、打印数组中每个元素

    c = [[2 3 4]
         [5 6 7]]
        [[1 3 7]
         [9 5 3]]
    
    for row in c:
        print(row)
    #[[2 3 4]
     [5 6 7]]
    [[1 3 7]
     [9 5 3]]
    
    for row in c.flat:
        print(row)
    
    #2
    3
    4
    5
    6
    7
    1
    3
    7
    9
    5
    3

    4、更改数据形状

    c = [[2 3 4]
         [5 6 7]]
        [[1 3 7]
         [9 5 3]]
    ##这三种方法都返回已修改的数组,但不更改原始数组
    ##展开
    c.ravel()
    #array([2, 3, 4, 5, 6, 7, 1, 3, 7, 9, 5, 3])
    
    c.reshape(6,2)
    #array([[2, 3],
           [4, 5],
           [6, 7],
           [1, 3],
           [7, 9],
           [5, 3]])
    c.T
    #array([[[2, 1],
            [5, 9]],
    
           [[3, 3],
            [6, 5]],
    
           [[4, 7],
            [7, 3]]])
    c.T.shape      #(3, 2, 2)
    
    #resize方法修改数组本身
    c.resize(2,6)
    print(c)
    #[[2 3 4 5 6 7]
     [1 3 7 9 5 3]]

    5、数据拼接

    ##纵向拼接使用np.vstack((a,b))或者np.row_stack((a,b))
    横向拼接使用np.hstack((a,b))或者np.column_stack((a,b))
    
    c = np.array([[(2,3,4),(5,6,7)],[(1,3,7),(9,5,3)]])    #(2,2,3)
    d = np.array([[(12,14,15),(11,17,18)],[(0,0,0),(0,0,0)]])   #(2,2,3)
    np.concatenate((c,d),axis=0)      #(4,2,3)
    #array([[[ 2,  3,  4],
            [ 5,  6,  7]],
    
           [[ 1,  3,  7],
            [ 9,  5,  3]],
    
           [[12, 14, 15],
            [11, 17, 18]],
    
           [[ 0,  0,  0],
            [ 0,  0,  0]]])
    np.concatenate((c,d),axis=1)  (2,4,3)
    #array([[[ 2,  3,  4],
            [ 5,  6,  7],
            [12, 14, 15],
            [11, 17, 18]],
    
           [[ 1,  3,  7],
            [ 9,  5,  3],
            [ 0,  0,  0],
            [ 0,  0,  0]]])

    更多相关内容
  • 概述numpy中多维数组索引与切片跟python中的列表类似,但最大的区别是,数组切片是原始数组的视图,也就是说对视图上的修改直接会影响到原始数组,因为numpy的主要是处理大数据,如果每次切片都进行一次复制,那对...

    作者:Zarten

    简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 !

    概述

    numpy中多维数组的索引与切片跟python中的列表类似,但最大的区别是,数组切片是原始数组的视图,也就是说对视图上的修改直接会影响到原始数组,因为numpy的主要是处理大数据,如果每次切片都进行一次复制,那对性能和内存是相当大的考验。

    索引及切片

    1.一维数组的索引及切片

    一维数组索引

    这个python的列表差不多

    import numpy as np

    zarten = np.array([1,2,3,4,5])

    print(zarten[2])

    一维数组切片

    import numpy as np

    zarten = np.array([1,2,3,4,5])

    print(zarten[1:3])

    修改

    对索引和切片的修改会直接映射到原数组。

    下面的所有的索引和切片的修改都会映射到原数组,下面的讲解将不再阐述。

    import numpy as np

    zarten = np.array([1,2,3,4,5])

    zarten[4] = 999

    zarten[1:3] = 888

    print(zarten)

    2.多维数组的索引及切片

    多维数组索引

    多维数组索引只需由外向内逐层选取

    比如:多维数组 [[1 2 3] [4 5 6] [7 8 9]]

    要选取6这个数字,索引为[1][2],也可写成 [1,2]

    import numpy as np

    zarten = np.array([[1,2,3], [4,5,6], [7,8,9]])

    print(zarten[1][2])

    print(zarten[1,2])

    多维数组切片

    多维数组的切片就有所不同了,比如:

    zarten[:2, 1:]

    前面的 :2 切的是行, 1: 切的是列。行是从上到下,列是从左到右

    import numpy as np

    zarten = np.array([[1,2,3], [4,5,6], [7,8,9]])

    print(zarten)

    print('*' * 50)

    print(zarten[:2, 1:])

    3.布尔型索引及切片

    布尔型索引

    布尔型索引指的是一个布尔型ndarray数组(一般为一维)对应另一个ndarray数组的每行,布尔型数组的个数要必须与另一个多维数组的行数一致。若布尔型数组内的某个元素为True,则选取另一个多维数组的行,反之不选取。

    这样说可能太抽象,下面代码说明就很好理解了。

    下面代码是选取第一行和最后一行

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    zarten_bool = np.array([True, False, False, False, True])

    print(zarten[zarten_bool])

    假设每一行代表一个字母的信息,分别是A B C D A

    现在需要选择A字母的对应的行信息,可以看到第一行和最后一行是A字母的信息

    通过比较操作可以生成关于字母A的布尔型数组

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    zarten_1 = np.array(['A', 'B', 'C', 'D', 'A'])

    print(zarten[zarten_1 == 'A'])

    条件索引

    上面中默认是True的就选取,False就不选取。也可以设置条件,如:

    != 不等于

    & 与运算

    | 或运算

    != 示例

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    zarten_1 = np.array(['A', 'B', 'C', 'D', 'A'])

    print(zarten[zarten_1 != 'A'])

    & 示例

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    zarten_1 = np.array(['A', 'B', 'C', 'D', 'A'])

    cond = (zarten_1 == 'B') & (zarten_1 == 'C')

    print(cond)

    print(zarten[cond])

    由上图可以看到 (zarten_1 == 'B') & (zarten_1 == 'C') ,两个布尔型数组&后全部为False,固没有选取任何的一行。

    布尔型切片

    跟多维数组的切片类似,[行, 列]第一个为行,第二个为列切片。下面代码将很好的说明

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    zarten_1 = np.array(['A', 'B', 'C', 'D', 'A'])

    print(zarten[zarten_1 == 'A'])

    print('*' * 50)

    print(zarten[zarten_1 == 'A', 1:3]) #切片

    4.花式索引

    花式索引

    花式索引跟布尔型索引类似,花式索引是可以使用整数数组进行索引,可以选取任意的行,跟布尔型索引的[True, False , False]类似,可以任意选取。花式索引更方便些。

    注意:花式索引是传入整数数组。若为负数,将从末尾开始选取

    例如现在选取第一行和第二行。下面将布尔型索引和花式索引做一个对比

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    #选取第一行和第二行

    #布尔型索引做法

    zarten_bool = np.array([True, True, False, False, False])

    print(zarten[zarten_bool])

    print('*' * 50)

    #花式索引做法

    print(zarten[[0, 1]])

    花式切片

    跟上面的类似,看代码一目了然

    import numpy as np

    zarten = np.random.randn(5,4)

    print(zarten)

    print('*' * 50)

    #选取第一行和第二行

    #布尔型索引做法

    zarten_bool = np.array([True, True, False, False, False])

    print(zarten[zarten_bool])

    print('*' * 50)

    #花式索引做法

    print(zarten[[0, 1], 1:3])

    展开全文
  • Numpy 中多维数组切片操作 Python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成import numpy as nparr = np.arange(12)print 'array is:', arrslice_one = arr[:4]print 'slice begins at 0 ...

    Numpy 中多维数组的切片操作与 Python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成

    import numpy as np

    arr = np.arange(12)

    print 'array is:', arr

    slice_one = arr[:4]

    print 'slice begins at 0 and ends at 4 is:', slice_one

    slice_two = arr[7:10]

    print 'slice begins at 7 and ends at 10 is:', slice_two

    slice_three = arr[0:12:4]

    print 'slice begins at 0 and ends at 12 with step 4 is:', slice_three

    array is: [ 0 1 2 3 4 5 6 7 8 9 10 11]

    slice begins at 0 and ends at 4 is: [0 1 2 3]

    slice begins at 7 and ends at 10 is: [7 8 9]

    slice begins at 0 and ends at 12 with step 4 is: [0 4 8]

    上述例子是一维数组的例子,如果是多维数组,将不同维度上的切片操作用 逗号 分开就好了

    #coding: utf-8

    import numpy as np

    arr = np.arange(12).reshape((3, 4))

    print 'array is:'

    print arr

    #取第一维的索引 1 到索引 2 之间的元素,也就是第二行

    #取第二维的索引 1 到索引 3 之间的元素,也就是第二列和第三列

    slice_one = arr[1:2, 1:3]

    print 'first slice is:'

    print slice_one

    #取第一维的全部

    #按步长为 2 取第二维的索引 0 到末尾 之间的元素,也就是第一列和第三列

    slice_two = arr[:, ::2]

    print 'second slice is:'

    print slice_two

    array is:

    [[ 0 1 2 3]

    [ 4 5 6 7]

    [ 8 9 10 11]]

    first slice is:

    [[5 6]]

    second slice is:

    [[ 0 2]

    [ 4 6]

    [ 8 10]]

    对于 slice_two,如果 arr 是用 Python 的 list 表示的,那么要得到相同的结果得像下面这样,相对来说就麻烦多了:

    import numpy as np

    arr = np.arange(12).reshape((3, 4)).tolist()

    slice_two = [

    row[::2] for row in arr

    ]

    print slice_two

    [[0, 2], [4, 6], [8, 10]]

    对于维数超过 3 的多维数组,还可以通过 '…' 来简化操作

    #coding: utf-8

    import numpy as np

    arr = np.arange(24).reshape((2, 3, 4))

    print arr[1, ...] #等价于 arr[1, :, :]

    print arr[..., 1] #等价于 arr[:, :, 1]

    [[12 13 14 15]

    [16 17 18 19]

    [20 21 22 23]]

    [[ 1 5 9]

    [13 17 21]]

    展开全文
  • 一维数组类似MATLAB,多维数组写法不同。numpy起始值为0。起始行LMATLAB 叫第一行,numpy叫第零行。slice[start : stop : step]1. 对一维数组切片索引核心:操作类似list(),或者MATLAB的一维数组写法输入import...

    一维数组类似MATLAB,多维数组写法不同。numpy起始值为0。

    起始行LMATLAB 叫第一行,numpy叫第零行。

    slice[start : stop : step]

    1. 对一维数组切片或索引

    核心:操作类似list(),或者MATLAB的一维数组写法

    输入

    import numpy as np

    a = np.arange(10)

    print('a is:\n',a)

    # 索引

    b = a[0]

    print('b is:\n',b)

    # 切片

    c = a[0:7:2]

    d = a[5:]

    print('c is:\n',c)

    print('d is:\n',d)

    输出

    a is:

    [0 1 2 3 4 5 6 7 8 9]

    b is:

    0

    c is:

    [0 2 4 6]

    d is:

    [5 6 7 8 9]

    2. 对多维数组切片或索引

    索引:

    注意MATLAB是一个个点坐标,numpy是同维度的坐标写在一个括号里。

    例如三维空间数组里有四个点:

    (x1,y1,z1),(x2,y2,z2),(x3,y3,z3),(x4,y4,z4)

    MATLAB写法

    [ (x1,y1,z1) , (x2,y2,z2) , (x3,y3,z3) , (x4,y4,z4) ]

    numpy写法

    [(x1,x2,x3,x4) , (y1,y2,y3,y4) , (z1,z2,z3,z4)]

    延伸抽象出numpy的写法,每个括号里类似一维操作。

    [(针对x轴的一维操作),(针对y轴的一维操作),(针对z轴的一维操作)]

    2.1 二维数组例子

    格式: 数组名[行操作,列操作]

    两个占位符:

    ... 维度占位符,对行或列全选/不操作

    : 某个维度内元素占位符,对前/后的元素进行全选,参考切片的slice[start:stop:step]

    切片可视化:

    53a82d8f6386

    slice-2.png

    >>> y = np.arange(35).reshape(5,7)

    [[ 0 1 2 3 4 5 6]

    [ 7 8 9 10 11 12 13]

    [14 15 16 17 18 19 20]

    [21 22 23 24 25 26 27]

    [28 29 30 31 32 33 34]]

    >>> y[1:5:2,::3]

    array([[ 7, 10, 13],

    [21, 24, 27]])

    # Python3.6 IN

    import numpy as np

    x = np.array([[1, 2], [3, 4], [5, 6]])

    print('x is :\n',x)

    y = x[[0,1,2], [0,1,0]]

    print('x is :\n',y)

    # Python3.6 OUT

    x is :

    [[1 2]

    [3 4]

    [5 6]]

    x is :

    [1 4 5]

    3. 布尔索引

    其实有点像运算,或者设置过滤布尔类型的过滤条件。

    # Python3.6 IN

    import numpy as np

    x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])

    print('x is :\n',x)

    b = x[x > 5]

    print('b is :\n',b)

    # Python3.6 OUT

    x is :

    [[ 0 1 2]

    [ 3 4 5]

    [ 6 7 8]

    [ 9 10 11]]

    b is :

    [ 6 7 8 9 10 11]

    参考资料

    2018.5.14

    展开全文
  • numpy多维数组索引

    千次阅读 2022-03-25 14:41:07
    python的numpy中的多维数组,有时候需要定位到数组中的某些区域元素的位置。 一维 一维数组很简单,我们可以直接指定索引,或者使用切片索引。 比如: data[0],这时候输出单个具体数值,没有维度 data[:3],这时候...
  • 根据我的理解,关于多维数组索引与切片,不需要可以去记他的模式,这一小块,唯一需要理解的是这个多维数组的shape.只要把这个概念真正理解了,关于索引与切片问题迎刃而解了; 首先初始化上面的这样一个多维...
  • Python多维数组索引说明

    千次阅读 2021-02-03 20:47:08
    这两个索引的存在,其中一个索引是一个整数数组t,另一个索引是一个切片:,这导致了所谓的“高级和基本索引的组合”。在 现在,在这种“组合”的情况下到底会发生什么?接下来是: 首先,结果的形状将从第一个索引t...
  • 一维、二维、三维的数组...1、一维数组索引切片 import numpy as np # 一维数组索引切片 ar = np.arange(20) print('ar = ', ar) print('ar[4] = ', ar[4]) print('ar[3:6] = ', ar[3:6]) 打印结果: ar = [ 0
  • numpy库多维数组的类型和列表的类型非常类似,同样有索引切片功能: 索引:获取数组中特定位置元素的过程 切片:获取数组元素子集的过程 1、一维数组的索引切片Python的列表类似 In [34]: a = np.a...
  • ndarray支持在多维数组上的切片操作。为了方便起见,我们可以用一个省略号(...)来表示遍历剩下的维度。(1)举例来说,我们先用arange函数创建一个数组并改变其维度,使之变成一个三维数组:>>>b=np.arange(24)....
  • Python多维数组切片

    千次阅读 2020-12-19 11:11:52
    2. list切片类似C数组,多维度分别用”[]“索引,单维度切片用”:“,如:>>> a[[1, 2, 3], [4, 5, 6], [7, 8, 9]]>>> a[1][1:3][5, 6]但是这样做第二个维度索引不起作用:>>> a[1:3][0:...
  • 数组索引切片

    2021-10-22 08:36:39
    1. 若是一维数组,和python列表...多维数组也是通过中括号进行索引切片,中括号中用逗号分隔行和列。 若二维数组只有一个值,这个值是行。若三维数组只有一个值,是块 数据准备 a2=np.random.randint(5,10,size=(4,6))
  • 目录 一、数组 1. 定义数组:四种方式 ...5. 直接相等的切片与copy()切片的区别 6. 切片追加、合并、删除元素 一、数组 1. 定义数组:四种方式 package main import "fmt" func main() { .
  • 它是一个由多维数组对象和用于处理数组的例程集合组成的库。Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray ...
  • 多维数组切片(slicing)

    千次阅读 2019-09-19 19:53:52
    Numpy 中多维数组切片操作 Python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成 import numpy as np arr = np.arange(12) print 'array is:', arr slice_one = arr[:4] print 'slice ...
  • arr = np.array([[2, 0, 0], [0, 3, 2], [1, 2, 1]])#注意,多维数组有两个方括号,matlab不同。 print(arr[0]) print(arr[1,1]) print(arr[1][1]) #结论 #(1)注意numpy的ndarray数组类型matlab矩阵类型的...
  • 数组索引与切片

    2021-10-12 18:55:40
    数组的切片操作 总结:[ ]中的切片顺序是从行切片开始。(1)[ : ][ : ]表示连续两次行切片操作(2)[ : , : ]表示一次行切片 数组的索引操作 ...(3)多维数组里,单个索引值返回对应的低一维数组 ...
  • 数组索引 list01= [1,2,3,4,5] np01 = np.array(list01,dtype="int32") print(np01) """ 正向递增索引 从0开始 1, 2, 3, 4, 5 数据 0 1 2 3 4 索引 1.左开右闭 2.不写startIndex默认从0开始 """ print(np01[0]...
  • 数组索引与切片前言数组索引索引获得单个元素索引获得单个数组list索引数组切片:索引切片多维切片索引+切片list索引+切片...的作用 前言 本篇记录numpy数组的索引和切片方法。 数组索引 需要获取numpy数组中的元素...
  • 多维数组切片索引 import numpy as np b = np.arange(24) print(b) [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23] reshape函数切分的思想,先分两半,对应2,再在每个分3份对应3…… ...
  • Numpy数组索引与切片

    2021-10-09 06:16:41
    Numpy数组索引与切片 1. `ndarray`对象的内容可以通过`索引`或`切片`来获取和修改,就像 Python 的内置容器对象一样。 2. `一维数组`:一维数组比较简单,看起来和python列表很类似。 3. `二维数组`:每个索引值对应的...
  • 数组的索引就是找到数组中的某个位置的元素,切片则是找某个子集,一组数据。在使用numpy工具包如何对...a=np.arange(24).reshape((2,3,4))print(a)得到如下一个多维数组:[[[0123][4567][891011]][[12131415][1...
  • 数组索引切片主要有以下三个特点: ①数组索引从0开始 ②可以反向索引 ③可以对每一个维度都可以进行切片 '''数组下标从0开始,指的任意维度,下标都从0开始''' a = np.array([[1, 2], [5, 6]]) a ''' array...
  • numpy--数组索引切片

    2021-09-17 11:16:02
    一维数组 多维数组 也是通过中括号来索引切片,在中括号中,使用逗号进行分割,逗号前面的是行,逗号...3.如果是多维数组(这里以二维为例),那么行的部分和列的部分,都是遵循一维数组的方式,可以使用整形,切片
  • 一、Numpy 切片索引 ndarray对象的内容可以通过索引切片来访问和修改,就像 Python 的内置容器对象一样。 如前所述,ndarray对象中的元素遵循基于零的索引。 有三种可用的索引方法类型: 字段访问,基本切片...
  • 一维数组切片数组[start????step] 从start到end,以step为步长的元素 且:start < end. >>> b=np.random.randint(1,10,[10]) >>> b array([6, 5, 2, 3, 9, 9, 3, 8, 5, 8]) 正向第i个...
  • 1.概述今天我们来讲一下Numpy数组索引与切片,numpy数组索引与切片和Python中的切片与索引的作用相同,可以快速的取出数据,进行下一步的运用或者查看,但是两种切片还有一些不同的地方。另外我们可以通过数组的变形...
  • numpy数组索引与切片

    2019-07-30 10:52:07
    数组索引 一维数组索引 arr1=np.arange(10) print(arr1) 取第一个 print(arr1[0]) 取最后一个 print(arr1[-1]) 取数组中[0,3) print(arr1[0:3]) 取数组[0,3)步长(step)为2 print(arr1[0:3:2]) 二维数组 arr1=np....
  • ndarray的索引切片获取内容

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,553
精华内容 3,821
关键字:

多维数组的索引与切片