精华内容
下载资源
问答
  • 最近,在做Python重写Matlab代码项目的时候,遇到了numpy中的ravel_multi_index函数,经过查阅官方文档和多次的验证,现将自己的一点学习心得与大家一起分享。

    ravel_multi_index函数:

    官方文档:ravel_multi_index

    语法:

    numpy.ravel_multi_index(multi_index, dims, mode=‘raise’, order=‘C’)

    参数说明:

    输入参数:

    multi_index - 类数组的元组。整数数组的元组,每个维度一个数组;

    dims - 整数元组。multi_index的索引将应用到的数组的shape;

    mode - 可选:“raise”、“wrap”、“clip”,指定如何处理越界索引。可以指定一个模式或一组模式,每个索引一个模式。其中,raise为默认,表示引发错误。

    order - 可选:“C”和“F”,确定是否应将多索引视为按行优先(C)或列优先(F)的索引。

    返回值

    raveled_indices - ndarray类型。
    官方解释为:An array of indices into the flattened version of an array of dimensions dims.

    示例:

    例1:

    >>> import numpy as np
    >>>
    >>> arr = np.array([[3,6,6],[4,5,1]])
    >>> np.ravel_multi_index(arr, (7,6))
    array([22, 41, 37], dtype=int64)
    >>>
    

    代码分析:
    该代码默认以“”优先。在7x6的数组中,取其中(3,6)、(6,5)、(6,1)位置对应的索引数组中的索引值,如下图:
    在这里插入图片描述
    由上图可以得到以下规律:
    [3, 4] ——> 3 * 6 + 4 = 22
    [6, 1] ——> 6 * 6 + 5 = 41
    [6, 5] ——> 6 * 6 + 1 = 37

    例2:

    >>> import numpy as np
    >>>
    >>> arr = np.array([[3,6,6],[4,5,1]])
    >>> np.ravel_multi_index(arr, (7,6), order='F')
    array([31, 41, 13], dtype=int64)
    >>>
    

    代码分析:
    该代码以“”优先,在7x6的数组中,取其中(3,6)、(6,5)、(6,1)位置对应的索引数组中的索引值,如下图:
    在这里插入图片描述
    由上图可以得到以下规律:
    [3, 4] ——> 3 + 4 * 7 = 31
    [6, 1] ——> 6 + 5 * 7 = 41
    [6, 5] ——> 6 + 1 * 7 = 13

    例3:

    >>> import numpy as np
    >>>
    >>> arr = np.array([[3,6,6],[4,5,1]])
    >>> np.ravel_multi_index(arr, (4,6), mode='clip')
    array([22, 23, 19], dtype=int64)
    >>>
    

    例4:

    >>> import numpy as np
    >>>
    >>> arr = np.array([[3,6,6],[4,5,1]])
    >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap'))
    array([12, 13, 13], dtype=int64)
    

    例3和例4都是以“行”优先,只是设置了不同的“mode”参数,大家可以自己运行以上代码,详细了解其功能。

    展开全文
  • arr = np.array([[3,6,6],[4,5,1]]) >>> np.ravel_multi_index(arr, (7,6)) array([22, 41, 37]) 按照编学号的思路,计算过程为22 = 3x6+4,41 = 6x6+5, 37 = 6x6+1 >>> np.ravel_multi_index(arr, (7,6), order='F'...

    1.引入——学生信息管理系统

            在一所学校中,往往有成百上千的学生,现在要对全体学生的信息进行管理。首先需要用一种方法来区别每一位学生,日常生活中最常用的是姓名,但是重名的学生也是比较常见的,他们甚至存在于同一个班级。 因此,学号逐渐成为了学生的一个重要属性,用一个独一无二的数字去对应一个学生,大大简化了信息管理的复杂性。

            编排学号的方式有很多种,可以根据姓名拼音,班级,籍贯等信息进行。在这个例子中,我们根据班级和学生的座位进行编排。例如,假设在一个学校中有两个班级,每个班级有8x8=64个学生,那么一共需要64x2=128个编号,如果编号从0开始,那么编号范围是0~127。

            现在我们要对一个学生进行编号。 首先看他属于哪个班,如果属于第i个班,那么他的起始学号为(i-1)x64。接下来看他的座位在第几行,如果在第j行,那么该行的学号从(i-1)x64+(j-1)x8开始。最后是他的精确座位,假设他处于第k列,那么最后他的学号为(i-1)x64+(j-1)x8+(k-1)。以此类推,如果加入年级作为额外的属性,那么需要四步来确定他的学号。最终,每个学生都会获得一个独一无二的学号。

            如果已经知道了一个学生的学号,那么分别求其对于64(8x8)、8以及1的商,就可以得知该同学的各项具体信息了。

    2.Numpy中的编码和解码

    2.1    编码:numpy.ravel_multi_index

            现在,我们把学校抽象为一个多维数组,学生抽象为数组中的元素,任务是对这些元素进行编号。Numpy中的numpy.ravel_multi_index函数可以完成这个任务,其原理与上述学号编码方法类似,接下来具体解构一下这个函数。

    2.1.1    函数原型:numpy.ravel_multi_index(multi_indexdimsmode='raise'order='C')

            可以看出,其中有四个参数,分别是:

                               multi_index:待编码的元素坐标

                               dims:元素所处数组的尺寸

                               mode:编码模式,用来解决溢出问题

                               order:编码顺序,行优先还是列优先等

            待编码的元素坐标通常为一个元组,例如(1,2)表示一个二维坐标,([1,1],[2,3])表示(1,2)和(1,3)两个坐标,(1,2,3)表示三维坐标。需要注意的是python的各个维度从0开始,因此不需要像第一部分的例子中的各维度减一操作。而且需要保证每个维度上包含的点的数目一致,例如([1,2,3],[1,2])为非法的坐标。

            数组的尺寸也为一个元组,其中元素的数量为整个数组的维度,数字表示各维度上的取值范围。例如(1,2,3)表示一个三维数组,各维度包含的元素个数分别为1,2,3.

            mode主要用来解决溢出问题。例如,对于一个坐标为(5,5)的元素,要将其放到一个2行2列的数组中,就不能直接计算,需要根据一定的规则处理这种溢出问题。Mode有三个选项,raise、wrap、clip。Raise表示直接返回错误提示,wrap为循环处理,clip为直接截断。

            order表示顺序。有C和F两种模式。对于二维数组,可简单理解为C表示行优先,F表示列优先。对于多维数组,没有行列的概念,C表示正序,F表示逆序,例如numpy.ravel_multi_index((1,2,3),(4,5,6)) = numpy.ravel_multi_index((3,2,1),(6,5,4),order = 'F')。

    2.1.2 几个例子

            以下例子节选自官方文档。

        arr = np.array([[3,6,6],[4,5,1]])
        >>> np.ravel_multi_index(arr, (7,6))
        array([22, 41, 37])
        按照编学号的思路,计算过程为22 = 3x6+4,41 = 6x6+5, 37 = 6x6+1
    
        >>> np.ravel_multi_index(arr, (7,6), order='F')
        array([31, 41, 13])
        该结果等同于np.ravel_multi_index(np.array([[4,5,1],[3,6,6]]), (6,7), order='F')
    
        >>> np.ravel_multi_index(arr, (4,6), mode='clip')
        array([22, 23, 19])
        该模式为截断,第一个点在范围内,计算方法不变。第二个点为(6,5),而矩阵的范围为(0~3,0~5),因此截断为(3,5),后续计算过程为23=3x6+5。第三个原理同上。
        
        >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap'))
        array([12, 13, 13])
        该模式为混合模式,第一个维度截断,第二个维度循环。矩阵范围为(0~3,0~3), 考虑第二个点(6,5),6截断为3,5循环后为mod(5,4) = 1,新坐标为(3,1),13 = 3x4+1。
        
        最后是一个多维的例子。
        >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9))
        1621
        直观不太好理解,返回之前的学号例子。现在要编码一个3年级1班第4行第1列的同学(均从0开始)。从dim可以看出,学校一共6个年级,每个年级7个班,每班有8行9列。那么,年级比该同学小的一共有3x7x8x9人,同年级班号比其小的有1x8x9人,合起来其学号为3x7x8x9+1x8x9+4x9+1 = 1621。
    

    2.2    解码:numpy.unravel_index

            该函数为上述函数的逆过程。根据学号例子我们可以只要,解码过程类似于长除法,一直求商即可。

    2.2.1    函数原型:numpy.unravel_index(indicesshapeorder='C')

             共三个参数,各定义与2.1.1相同。

    2.2.2 几个例子

            以下例子均来源于官方文档。

        >>>np.unravel_index([22, 41, 37], (7,6))
        (array([3, 6, 6]), array([4, 5, 1]))
        以第一个点为例。22/6 = 3, (22-3*6)/1 = 4,即为第一个结果。
        >>>np.unravel_index([31, 41, 13], (7,6), order='F')
        (array([3, 6, 6]), array([4, 5, 1]))
        以第一个点为例。 31/7 = 4, (31-4x7)/1 = 3,倒过来即为结果。
    
        >>>np.unravel_index(1621, (6,7,8,9))
        (3, 1, 4, 1)
        这是一个多维问题,计算方法类似。
        1621/(7x8x9)=3
        (1621-3x7x8x9)/(8x9) = 1 
        (1621-3x7x8x9-1x8x9)/(9) = 4
        (1621-3x7x8x9-1x8x9-4x9)/(1) = 1
        即可得到结果。
    

     

            

     

    展开全文
  • numpy.ravel_multi_index

    2021-07-20 11:12:11
    numpy.ravel_multi_index ()图解 numpy.ravel_multi_index(multi_index, dims, mode='raise', order='C') 参数: multi:整数数组们的元组,其中每个数组代表的是一个维度 dims:表示原array组的shape[col,row] ...

    numpy.ravel_multi_index ()图解

    numpy.ravel_multi_index(multi_index, dims, mode='raise', order='C')
    参数

    • multi:整数数组们的元组,其中每个数组代表的是一个维度
    • dims:表示原array组的shape[col,row]
    • mode:{‘raise’, ‘wrap’, ‘clip’}, optional
    • order:{‘C’, ‘F’}, optional,'C’表示按照行优先,‘F’表示按列优先

    案例

    arr = np.array([[3,6,6],[4,5,1]])
    np.ravel_multi_index(arr, (7,6))
    # output: array([22, 41, 37])
    
    • (7,6):表示在一个shape(7,6)的array数组中
    • arr: 表示在上数组中索引(3,4),(6,5),(6,1)的三组索引
      将上诉二维数组按照行或者列的方式拉平为一维数组后,二维数组中的元素的索引对应着一维数组的索引
      在这里插入图片描述
    展开全文
  • Numpy中的ravel_multi_index函数

    千次阅读 2017-06-15 15:09:39
    最近遇到了ravel_multi_index这个函数,官方文档看不明白,Google了一番好不容易才从一堆示例代码里理解函数的意义,记录一下。官方文档在这 这个函数主要功能为把给定的一个多维数组(函数的第一个参数)看作索引...

    最近遇到了ravel_multi_index这个函数,官方文档看不明白,Google了一番好不容易才从一堆示例代码里理解函数的意义,记录一下。


    官方文档在这
    这个函数主要功能为把给定的一个多维数组(函数的第一个参数)看作索引数组,索引什么呢?去索引一个形状为dims(函数的第二个参数),值为依次增大的自然数的数组中的值(可看做由list(range(N))的数组reshape(dims)而来),意义即为用一个唯一的一维数来定位(保存)原数组的二维(或多维(i,j,k,…))的数对的信息。

    把文档里的示例代码贴一下来解释:

    >>> arr = np.array([[3,6,6],[4,5,1]])
    >>> np.ravel_multi_index(arr, (7,6))
    array([22, 41, 37])
    >>> np.ravel_multi_index(arr, (7,6), order='F')
    array([31, 41, 13])
    >>> np.ravel_multi_index(arr, (4,6), mode='clip')
    array([22, 23, 19])
    >>> np.ravel_multi_index(arr, (4,4), mode=('clip','wrap'))
    array([12, 13, 13])
    >>> np.ravel_multi_index((3,1,4,1), (6,7,8,9))
    1621

    示例中arr即为要转换的多维数组,把arr的内容当作索引,即[3,6,6]为横坐标,[4,5,1]为纵坐标,去索引形状为(7,6),内容为从0开始,从左往右,从上往下依次增大的自然数的数组中的值。

    例如第一个要索引的数[3,4]即为(7,6)数组中第4行,第5列的的值,即为3*6+4=22,即为结果中的第一个数。依次类推。

    了解函数功能后,其他参数具体可见官方文档说明。

    展开全文
  • numpy.unravel_index 说明

    万次阅读 2017-04-20 10:59:44
    对numpy.unravel_index 的使用说明
  • 逻辑回归的介绍与优劣势 逻辑回归(Logistic regression,简称LR)虽然其中带有"回归"两个字,但逻辑回归其实是一个分类模型,并常用于二分类。...import numpy as np ## 导入画图库 import matplotlib.pyplot as plt
  •  # j is the feature index or the dimension index The value of , which is used to update the weight , is calculated by the perceptron learning rule: # i is the instance index Where is the learning ...
  • import numpy as np class AdalineGD(object): #Parameters # eta: Learning rate (between 0.0 and 1.0) # n_iter: Passes over the training dataset # random_state: Random number generator seed for random ...
  • z_proba = lr_clf.predict_proba(np.c_[x_grid.ravel(), y_grid.ravel()]) z_proba = z_proba[:, 1].reshape(x_grid.shape) plt.contour(x_grid, y_grid, z_proba, [0.5], linewidths=2., colors='blue') # 设置...
  • np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)).reshape(-1,1), np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100)).reshape(-1,1) ) X_new = np.c_[x0.ravel(), x1.ravel()] y_predict = ...
  • 引言 之前一段时间在参与语义分割的项目,最近有时间了,正好把这段... classname = m.__class__.__name__ if classname.find('BatchNorm') != -1: m.eval() #设置BN动量 def set_bn_momentum(m): classname = m...
  • https://matplotlib.org/stable/gallery/index.html¶ In[6]: import matplotlib.pyplot as plt #调用pyplot,以这个包为基础应该能满足数学建模基础作图要求 x = [1, 2, 3, 4, 5] y = [2.3, 3.4, 1.2, 6.6, 7.0]...
  • feat_width) * self._feat_stride shift_y = np.arange(0, feat_height) * self._feat_stride shift_x, shift_y = np.meshgrid(shift_x, shift_y) shifts = torch.from_numpy(np.vstack((shift_x.ravel(),...
  • import numpy as np dt = np.dtype([('age',np.int8)]) print dt 输出如下: [('age', 'i1')] 示例 5 # 现在将其应用于 ndarray 对象 import numpy as np dt = np.dtype([('age',np.int8)]) a = np.array([(10,),...
  • Pandas手册汉化

    千次阅读 2019-01-22 16:29:34
    MultiIndex 构造函数 MultiIndex 属性 MultiIndex 组件 MultiIndex 选择 DatetimeIndex 选择时间/日期组件 选择 特定时间的操作 转换 TimedeltaIndex ConversionComponents 转换 ...
  • Birds inspired us to fly, burdock plants inspired Velcro, and nature has inspired countless more inventions. It seems only logical, then, to look at the brain's architecture for inspiration on how to ...
  • 1,np.ceil(x, y) 限制元素范围,进一法,即向上取整。 x 表示输入的数据 y float类型 表示每个元素的上限。 a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) np.ceil(a) # array([-1., -1., -0., 1., 2...
  • SVM_Multi_class_classification

    千次阅读 2019-01-16 11:25:52
    import numpy as np #产生正态分布的数据100组,中心点(0,0),其标准差σ为1 p=np.random.randn(100,2) #将中心点移动到(5,0),作为第0类 for i in range(100): p[i][0]+=5 p[i][1]+=0 #产生正态分布的数据...
  • keras-yolo3图片检测代码讲解

    千次阅读 2020-05-30 16:52:11
    def __init__(self, **kwargs): self.__dict__.update(self._defaults) # set up default values self.__dict__.update(kwargs) # and update with user overrides 将刚才设置的参数传进来 self.class_names = self....
  • 答:通过特征描述符的索引下表和特征点的.pt属性获取 # 获取关键点的坐标 src_pts = np.float32([kp1[m.queryIdx].pt for m in good]).reshape(-1, 1, 2) print(src_pts) dst_pts = np.float32([kp2[m.trainIdx]...
  • 地理空间数据

    2020-08-10 03:00:29
    filter = "Las Vegas"dtf = dtf[dtf["City"]==filter][["City","Street Address","Longitude","Latitude"]].reset_index(drop=True)dtf = dtf.reset_index().rename(columns={"index":"id"}) dtf.head() In that ...
  • ------------- import torch import numpy as np import pdb # ========================================== # 函数输入: 两个区域的左下角右上角坐标,一个是预测的ROI,另一个是ground_truth # 函数输出: x, y, w,...
  • 其实,c_并不是一个函数,它只是CClass类的一个实例,而CClass是... 'ravel_multi_index', 'unravel_index', 'mgrid', 'ogrid', 'r_', 'c_', 's_', 'index_exp', 'ix_', 'ndenumerate', 'ndindex', 'fill_diagona...
  • import numpy as np ## 导入画图库 import matplotlib.pyplot as plt import seaborn as sns ## 导入逻辑回归模型函数 from sklearn.linear_model import LogisticRegression ##Demo演示LogisticRegression分类 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 517
精华内容 206
关键字:

np.ravel_multi_index