精华内容
下载资源
问答
  • 这涉及到吧多维数组映射为一维数组。 对于3维数组,有公式: def MAP(x,y,z): return y_s * z_s * x + z_s * y + z 此公式可以推广到N维 测试代码:(两个输出相同,说明测试成功) import numpy as np...

    这涉及到吧多维数组映射为一维数组。

    对于3维数组,有公式:

    def MAP(x,y,z):
        return y_s * z_s * x + z_s * y + z

    此公式可以推广到N维

    测试代码:(两个输出相同,说明测试成功)

    import numpy as np
    
    x_s=4
    y_s=3
    z_s=9
    
    def MAP(x,y,z):
        return y_s * z_s * x + z_s * y + z
    
    org=np.arange(x_s*y_s*z_s)
    arr=np.resize(org,[x_s,y_s,z_s])
    
    x=2
    y=1
    z=3
    print(org[MAP(x,y,z)])
    print(arr[x,y,z])

     

    转载于:https://www.cnblogs.com/TQCAI/p/8886578.html

    展开全文
  • Numpy - 多维数组 一创建numpy数组 列表生成numpy数组 使用函数来生成数组 文件 IO 创建数组 操作数组Numpy - 多维数组加载包: from numpy import * 一、创建numpy数组:有多种方式:使用 Python 列表或元祖,使用 a...


    加载包: from numpy import *

    一、创建numpy数组:

    有多种方式:使用 Python 列表或元祖,使用 arange, linspace 等函数,从文件中读取数据。

    1. 列表生成numpy数组


    v=array([1,2,3,4])
    m=array( [ [1,2],[3,4] ] )
    type(v):类型查看,结果为numpy 模块提供的 ndarray 类型
    v.shape :通过 ndarray.shape 获得它的维度属性
    v.size :通过ndarray.size获取数组的元素数量
    shape(M),size(M):使用 numpy.shape 与 numpy.size 函数获取对应属性值
    M.dtype:使用 ndarray 的 dtype 属性获得数组元素的类型

    numpy.ndarray与list区别:

    • Python 的 list 是动态类型,可以包含不同类型的元素,所以没有支持诸如点乘等数学函数,因为要为 list 实现这些操作会牺牲性能。
    • Numpy 数组是静态类型并且齐次。 元素类型在数组创建的时候就已经确定了。
    • Numpy 数组节约内存。
    • 由于是静态类型,对其数学操作函数(如矩阵乘法,矩阵加法)的实现可以使用 C 或者 Fortran 完成。

    M = array([[1, 2], [3, 4]], dtype=complex) :通过在创建数组时使用 dtype 关键字参数显示地定义元素类型。dtype 的常用值有:int, float, complex, bool, object 等,大小比如:int64/16, float128, complex128

    2. 使用函数来生成数组

    需要生产大数组时可以使用函数来生成数组,最常用的有如下几个函数:

    • arange
      x = arange(0, 10, 1) #arguments: start, stop, step
      => array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

    • linspace 与 logspace
      linspace(0, 10, 25):# using linspace, both end points ARE included 生成25个0~10的数
      logspace(0, 10, 10, base=e) 加对数生成10个数

    • mgrid
      x, y = mgrid[0:5, 0:5]:# similar to meshgrid in MATLAB 生成网格数据
      x为每行元素相同,按行从0~4递增
      y为每列元素相同,按列从0~4递增

    • random data
      from numpy import random:导入
      random.rand(5,5): uniform random numbers in [0,1]
      random.randn(5,5):standard normal distributed random numbers

    • diag
      diag([1,2,3]): a diagonal matrix
      => array([[1, 0, 0],
      [0, 2, 0],
      [0, 0, 3]])
      diag([1,2,3], k=1) : diagonal with offset from the main diagonal
      => array([[0, 1, 0, 0],
      [0, 0, 2, 0],
      [0, 0, 0, 3],
      [0, 0, 0, 0]])

    • zeros 与 ones
      zeros((3,3))
      ones((3,3))

    3. 文件 I/O 创建数组

    • CSV
      CSV是一种常用的数据格式化文件类型,从中读取数据使用numpy.genfromtxt 函数。
      data = genfromtxt(‘stockholm_td_adj.dat’) 读数据head stockholm_td_adj.dat,data为numpy 数组。
      savetxt(“random-matrix.csv”, M,fmt=’%.5f’):使用 numpy.savetxt 将 Numpy 数组保存到csv文件中。 # fmt specifies the format
      !cat random-matrix.csv:查看文件。

    • Numpy 原生文件类型
      使用 numpy.save 与 numpy.load 保存和读取:
      save(“random-matrix.npy”, M)
      load(“random-matrix.npy”)

    • numpy 数组的常用属性
      M.itemsize //bytes per element
      M.nbytes //number of bytes
      M.ndim //number of dimensions

      4. 操作数组

    • 索引
      v[0],M[1,1]:用方括号进行检索
      如果是N(N > 1)维数列,在检索时省略了一个索引值则会返回一整行((N-1)维数列),例:

    M
    => array([[ 0.70506801, 0.54618952, 0.31039856],
    [ 0.26640475, 0.10358152, 0.73231132],
    [ 0.07987128, 0.34462854, 0.91114433]])
    M[1]
    => array([ 0.26640475, 0.10358152, 0.73231132])

    使用 : 能达到同样的效果:

    M[1,:] # row 1
    => array([ 0.26640475, 0.10358152, 0.73231132])
    M[:,1] # column 1
    => array([ 0.54618952, 0.10358152, 0.34462854])

    可以利用索引进行赋值:M[1,:] = 0,M[:,2] = -1

    • 切片索引
      M[lower:upper:step]:A[1:3]取下标1到3,不包括3.
      进行切片赋值时,原数组会被修改。参数可任意省略:
      A[::] 输出所有元素
      负值索引从数组尾开始计算:A[-3:] # the last three elements
      索引切片在多维数组的应用也是一样的:

    A = array([[n+m*10 for n in range(5)] for m in range(5)])
    =>array([[ 0, 1, 2, 3, 4],
    [10, 11, 12, 13, 14],
    [20, 21, 22, 23, 24],
    [30, 31, 32, 33, 34],
    [40, 41, 42, 43, 44]])

    • 高级索引
      指使用列表或者数组进行索引:

    row_indices = [1, 2, 3]
    A[row_indices]
    => array([[10, 11, 12,13, 14],
    [20, 21, 22, 23, 24],
    [30, 31, 32, 33, 34]])
    col_indices = [1, 2, -1] # remember, index -1 means the last element
    A[row_indices,col_indices]
    => array([11, 22, 34])


    可以用索引掩码:

    B = array([n for n in range(5)])
    B
    => array([0, 1, 2, 3, 4])

    row_mask = array([True, False, True, False, False])
    B[row_mask]
    => array([0, 2])

    row_mask = array([1,0,1,0,0], dtype=bool)
    B[row_mask]


    使用比较操作符生成掩码:

    x = arange(0, 10, 0.5)
    x
    => array([ 0. , 0.5, 1. , 1.5, 2. , 2.5, 3. , 3.5, 4. , 4.5, 5. ,
    5.5, 6. , 6.5, 7. , 7.5, 8. , 8.5, 9. , 9.5])

    mask = (5 < x) * (x < 7.5)
    mask
    => array([False, False, False, False, False, False, False, False, False,
    False, False, True, True, True, True, False, False, False,
    False, False], dtype=bool)

    x[mask]
    => array([ 5.5, 6. , 6.5, 7. ])

    展开全文
  • 接上一篇,本篇来介绍一下Numpy多维数组的运用。 多维数组: 多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用元组(tuple)作为数组的下标。 np.arange(0,60,10)...

    接上一篇,本篇来介绍一下Numpy中多维数组的运用。

    多维数组:

    多维数组的存取和一维数组类似,因为多维数组有多个轴,因此它的下标需要用多个值来表示,NumPy采用元组(tuple)作为数组的下标。

    np.arange(0,60,10).reshape(-1,1)+np.arange(0,6)
    

    在这里插入图片描述

    np.arange(0,60,10)+np.arange(0,6)
    

    在这里插入图片描述
    多维数组同样也可以使用整数序列和布尔数组进行存取。

    Numpy数组的操作

    反转操作:

    • numpy. reshape ()
    • numpy. ndarray. flatten()
    • numpy. ndarray. T ()

    连接操作:

    • numpy. concatenate ()
    • numpy. stack ()
    • numpy. hstack ()
    • numpy. vstack ()

    1、numpy. reshape ()

    order:读/索引元素的顺序,常用{‘C’,‘F’,‘A’}
    C:简单来说就是横着读,横着写,默认为C
    F:竖着读,竖着写
    A:如果原数组a按照F存储的话,生成效果为F;否则为C

    #reshape操作
    a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])
    print(a)
    

    在这里插入图片描述

    b = a.reshape(2,6)
    print(b)
    

    在这里插入图片描述

    b1 = a.reshape(2,6,order = 'F')
    print(b1)
    

    在这里插入图片描述

    2、numpy. ndarray. flatten()

    常用order:{‘C’,‘F’},默认为C

    a = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
    c = a.flatten()
    print(c)
    c1 = a.flatten(order = 'F')
    print(c1)
    

    在这里插入图片描述

    3、numpy. ndarray. T ()

    a = np.array([[1,2,3,4],[4,5,6,7],[7,8,9,10]])
    print(a)
    print(a.T)
    

    在这里插入图片描述

    4、numpy. concatenate ()

    • 传入的参数必须是一个多个数组的元组或者列表。
    • 另外需要指定拼接的方向,默认是axis = 0,也就是说对0轴的数组对象进行纵向的拼接(纵向的拼接沿着axis= 1方向);注:一般axis = 0,就是对该轴向的数组进行操作,操作方向是另外一个轴,即axis=1。
    • 传入的数组必须具有相同的形状,这里的相同的形状可以满足在拼接方向axis轴上数组间的形状一致即可。
      在这里插入图片描述
      二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
      ●使用0值表示沿着每一列或行标签索引值向下执行方法。
      ●使用1值表示沿着每一 行或者列标签模向执行对应的方法。
    #数组的连接操作
    a = np.arange(6).reshape(2,3)
    print("********a********")
    print(a)
    b = np.array([[7,8,9],[10,11,12]])
    print("********b********")
    print(b)
    

    在这里插入图片描述

    print(np.concatenate((a,b)))
    

    在这里插入图片描述

    print(np.concatenate((a,b),axis=1))
    

    在这里插入图片描述

    展开全文
  • Numpy 索引

    2021-01-16 10:34:23
    转载请注明:虚幻私塾 » Numpy 索引 一维索引 我们都知道,在元素列表或者数组中,我们可以用如同a[2]一样的表示方法,同样的,在Numpy中也有相对应的表示方法: import numpy as np A = np.arange(3,15) # array...

    转载请注明:虚幻私塾 » Numpy 索引

    一维索引

    我们都知道,在元素列表或者数组中,我们可以用如同a[2]一样的表示方法,同样的,在Numpy中也有相对应的表示方法:

    import numpy as np
    A = np.arange(3,15)
    
    # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
             
    print(A[3])    # 6
    

    让我们将矩阵转换为二维的,此时进行同样的操作:

    A = np.arange(3,15).reshape((3,4))
    """
    array([[ 3,  4,  5,  6]
           [ 7,  8,  9, 10]
           [11, 12, 13, 14]])
    """
             
    print(A[2])         
    # [11 12 13 14]
    

    实际上这时的A[2]对应的就是矩阵A中第三行(从0开始算第一行)的所有元素。

    二维索引

    如果你想要表示具体的单个元素,可以仿照上述的例子:

    print(A[1][1])      # 8
    

    此时对应的元素即A[1][1],在A中即横纵坐标都为1,第二行第二列的元素,即8(因为计数从0开始)。同样的还有其他的表示方法:

    print(A[1, 1])      # 8
    

    在Python的 list 中,我们可以利用:对一定范围内的元素进行切片操作,在Numpy中我们依然可以给出相应的方法:

    print(A[1, 1:3])    # [8 9]
    

    这一表示形式即针对第二行中第2到第4列元素进行切片输出(不包含第4列)。 此时我们适当的利用for函数进行打印:

    for row in A:
        print(row)
    """    
    [ 3,  4,  5, 6]
    [ 7,  8,  9, 10]
    [11, 12, 13, 14]
    """
    

    此时它会逐行进行打印操作。如果想进行逐列打印,就需要稍稍变化一下:

    for column in A.T:
        print(column)
    """  
    [ 3,  7,  11]
    [ 4,  8,  12]
    [ 5,  9,  13]
    [ 6, 10,  14]
    """
    

    上述表示方法即对A进行转置,再将得到的矩阵逐行输出即可得到原矩阵的逐列输出。

    最后依然说一些关于迭代输出的问题:

    import numpy as np
    A = np.arange(3,15).reshape((3,4))
             
    print(A.flatten())   
    # array([3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14])
    
    for item in A.flat:
        print(item)
        
    # 3
    # 4
    ……
    # 14
    

    这一脚本中的flatten是一个展开性质的函数,将多维的矩阵进行展开成1行的数列。而flat是一个迭代器,本身是一个object属性。

    展开全文
  • nditer —— numpy ndarray 多维数组的迭代
  • Numpy ndarray 多维数组对象

    千次阅读 2021-02-07 15:38:22
    Numpy基础 介绍 目前它是Python数值计算中最为重要的基础包,将numpy的数组的对象作为数据交互的通用语,一般我们要充分理解好矩阵计算的原理,这需要你要有一些线性代数的基础知识。在对数据处理、清洗、构造子集...
  • Numpy数组的索引和切片 数组转置和轴对换 Numpy简介 Numpy(Numerical Python)是Python数值计算最重要的基础包。 Numpy的功能: ndarray,多维数组,具有矢量运算和复杂广播能力,且节省空间。 不需要编写循环就可以...
  • Numpy - 多维数据数组

    2020-06-18 01:33:41
    numpy包(模块)几乎总是用于Python中的数值计算。这个软件包为Python提供了高性能的向量、矩阵、张量数据类型。它是在C和Fortran中创建的,因此当计算被矢量化(用矩阵和矢量表示操作)时,性能很高。 1.模块的导入...
  • Numpy多维数组的切片操作与 Python

    千次阅读 2018-07-12 11:13:33
    切片(slicing)操作Numpy多维数组的切片操作与 Python 中 list 的切片操作一样,同样由 start, stop, step 三个部分组成import numpy as np arr = np.arange(12) print 'array is:', arr slice_one = arr[:4] ...
  • import numpy as np a = np.arange(3, 15) a = np.arange(3, 15).reshape((3, 4)) # print(a[2]) # print(a[2][1]) # print(a[1, 1]) print(a) print(a[1, 1:3]) # 取左不取右 # 按行遍历 for row in a: ...
  • Numpy - 多维数组(下)

    千次阅读 2017-04-05 11:11:36
    一操作 numpy 数组的常用函数 二线性代数 标量运算 Element-wise逐项乘 数组-数组 运算 矩阵代数 数组矩阵 变换 矩阵计算 数据处理例子用 numpy 来处理斯德哥尔摩天气的数据 ...使用 where 函数能将索引掩码转
  • 主要参考:菜鸟教程https://www.runoob.com/numpy/numpy-ndarray-object.html ...NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引
  • numpy索引与切片

    2020-10-22 15:08:13
    一、整数索引 作用:要获取数组的单个元素,指定元素的索引即可 例子: x = np.array([1, 2, 3, 4, 5, 6, 7, 8]) print(x[2]) # 3 x = np.array([[11, 12, 13, 14, 15], [16, 17, 18, 19, 20], [21, 22, 23, ...
  • Numpy提取多维数组的某行/列

    千次阅读 2018-12-29 09:34:20
    NumPy提供了一种提取多维数组的行/列的强大方法。例如,考虑我们上面定义的my_array的例子。 [[4 5] [6 1]] 假设,我们想从中提取第二列(索引1)的所有元素。在这里,我们肉眼可以看出,第二列由两个元素组成:5...
  •  为实现对多维数组按多列排序,如有三维数组坐标点(x,y,z),现需使其按照x进行升序排序,其后使y进行升序排序,最后为z。 # 有4行3列数组如下: arr = [[6 3 3] [3 1 1] [6 2 8] [4 0 3]] # 欲使其按如下排序...
  • Numpy索引与切片操作

    2019-07-30 14:24:08
    Numpy索引与切片操作 单元素索引 一维数据的单元素索引是最简单的一种索引方式,与Python列表的操作完全一致。 >>> x = np.arange(10) >>> x array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) >>&...
  • Numpy 基本知识NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库,主要用于数组计算。安装最简单的是使用 Pip 安装:python -m pip...
  • numpy多维数组的轴(axis)

    千次阅读 2016-10-13 13:58:02
    多维数组的轴(axis=)是和该数组的size(或者shape)的元素是相对应的; >>> np.random.seed(123) >>> X = np.random.randint(0, 5, [3, 2, 2]) >>> print(X) [[[5 2] [4 2]] [[1 3] [2 3]] [[1 1] [0 1]]]...
  • 多维数组的切片和索引 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索引和切片

    2018-02-24 10:49:07
    1、基本的索引和切片基本索引与切片与python列表操作类似arr = [1,2,3,4,5] arr[2:4] #[3,4] 当把标量值赋予给一个切片时(如arr...多维数据索引中,索引位置上的元素不是标量,而是一维数组了arr2=np.array([[1,2,3...
  • NumPy 索引 迭代 Resheap

    2016-05-29 11:02:18
    在原文基础上适当精简并更正少量原作者的笔误: 索引,切片和迭代 1. 一维数组可以被索引、切片和迭代,就像列表和其它Python序列。 >>> a =arange(10)**3 >>> a array([ 0, 1, 8, 27, 64, 125,
  • python3:Numpy索引

    2018-08-07 11:22:58
    我们都知道,使用Numpy可以存储和处理大型矩阵,必然需要学会使用矩阵的表示。矩阵中对应元素如何索引等。在此之前,我们已经学过线性代数中矩阵的表示,a[2][3]即表示第3行第4列的元素。那么,在numpy中也一样。 ...
  • 这属于 Python 的基础知识,在 Numpy 数组中同样也存在索引与切边的操作,它能够实现根据索引获取相应位置元素以及截取相应长度数组的目的,其实 Numpy 一维数组的索引切片操作和 Python 列表的操作相差无几,只存在...
  • 它极大的简化了多维数组的操纵和处理,大部分数据处理软件包都依赖于Numpy,例如pandas、matplotlib、scikit-learn等。Numpy的一些特点:NumPy 提供了对数组和矩阵进行快速运算的标准数学函数;NumPy 提供了很多矢量...
  • 一定要注意红圈部分,当一维索引里没有‘ :’时,取出来的是一维数组;反之,取出来的是二维数组。 可以这样理解:当一维数组里有冒号的时候,相当于对一维做了一个扩展,所以取出来的数据是二维数组。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,975
精华内容 4,390
关键字:

numpy索引多维