您当前的位置:首页 > IT编程 > python
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:Numpy中的ravel_multi_index函数用法说明

51自学网 2021-10-30 22:41:18
  python
这篇教程Numpy中的ravel_multi_index函数用法说明写得很实用,希望能帮到您。

最近遇到了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 与 numpy.ravel_multi_index的理解

遇到numpy.ravel_multi_index 与numpy.unravel_index 这两个函数,查了网上的很多资料 都没讲的很清楚,记录一下。

这两个函数是相对应的:

numpy.unravel_index(indices, shape, order='C')

其中indices是表示一个一维数组的index,将这个一维数组转换成大小为shape([col, row])shape矩阵决定了转变后得到的数组的行和列的大小,进而得到index在新的二维矩阵 中的行index 和列index 其中order决定先是行index,还是先是列index 'C'先是列index 再是行index ‘F'先是行index 再是列index

 np.unravel_index([22, 41, 37], (7,6))(array([3, 6, 6]), array([4, 5, 1]))

numpy.ravel_multi_index是numpy.unravel_index反过来的过程,

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

根据multi_index中不同数组代表的具体的索引,以及该数组的dims的大小 ,得到将该数组flat成一维数组 数据在一位数组中的位置。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持51zixue.net。如有错误或未考虑完全的地方,望不吝赐教。


Django上传xlsx文件直接转化为DataFrame或直接保存的方法
利用Python Django实现简单博客系统
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。