首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

给定子(父数组的子集) numpy数组,在父数组上找到该数组的索引?

要在父数组上找到子数组的索引,可以使用NumPy库中的numpy.where函数或者numpy.isin结合numpy.where来实现。以下是具体的方法和示例代码:

方法一:使用numpy.where

代码语言:txt
复制
import numpy as np

# 父数组
parent_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 子数组
sub_array = np.array([4, 5, 6])

# 找到子数组在父数组中的起始索引
indices = np.where(np.isin(parent_array, sub_array))[0][:-len(sub_array)+1]

print(indices)

方法二:使用numpy.searchsorted

代码语言:txt
复制
import numpy as np

# 父数组
parent_array = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])

# 子数组
sub_array = np.array([4, 5, 6])

# 找到子数组在父数组中的起始索引
indices = []
for i in range(len(parent_array) - len(sub_array) + 1):
    if np.array_equal(parent_array[i:i+len(sub_array)], sub_array):
        indices.append(i)

print(indices)

解释

  1. numpy.where方法
    • np.isin(parent_array, sub_array)会返回一个布尔数组,表示父数组中哪些元素在子数组中。
    • np.where(np.isin(parent_array, sub_array))[0]会返回这些元素的索引。
    • [:-len(sub_array)+1]是为了去除重复的索引,只保留子数组的起始索引。
  • numpy.searchsorted方法
    • 这种方法通过遍历父数组,检查每个可能的起始位置是否与子数组匹配。
    • 如果匹配,则将该位置添加到索引列表中。

应用场景

这种方法在数据处理、数据分析和机器学习等领域中非常有用,特别是在需要找到数组中的子序列或模式时。

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • NumPy学习指南】day4 多维数组切片和索引

    ndarray支持多维数组切片操作。为了方便起见,我们可以用一个省略号(...)来 表示遍历剩下维度。...你可能已经猜到,reshape函数作用是改变数组“形状”,也就是改变数组维度,其参数为一个正整数元组,分别指定数组每个维度上大小。如果指定维度和数组元素数目不相吻合,函数将抛出异常。...,使用如下代码: >>>b[0,::-1,-1] array([11, 7, 3]) 数组切片中间隔地选定元素: >>>b[0,::2,-1] array([3, 11]) 如果在多维数组中执行翻转一维数组命令...,将在最前面的维度上翻转元素顺序,我们 例子中将把第1层楼和第2层楼房间交换: >>>b[::-1] array([[[12,13, 14, 15], [16, 17, 18,...], [[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]]) 刚才做了些什么 我们用各种方法对一个NumPy

    1.2K20

    Python学习笔记之NumPy模块——超详细(安装、数组创建、正态分布、索引和切片、数组复制、维度修改、拼接、分割...)

    '> 由可知:使用array函数创建数组都是ndarray对象 【示例2】array函数中dtype使用... [4.+0.j 5.+0.j 6.+0.j] 由可知:array函数中dtype参数可以设置创建数组元素类型...(size=None),方法返回[0.0, 1.0)范围随机数。...,所以一个变量改变不会影响另一个变量 如下所示: 总结:我们只要记住在浅拷贝中,原始数组和新数组共同执行同一块内存;同时深拷贝中,新数组是原始数据单独拷贝,它指向一块新内存地址。...可以看到,数组 A 和数组 B 水平方向首尾连接了起来,形成了一个新数组。这就是数组水平组合。多个数组进行水平组合效果类似。

    7.2K11

    利用Numpyascontiguousarray可以是数组在内存连续,加速计算

    概述 使用Numpy时候,有时候会遇到下面的错误:  AttributeError: incompatible shape for a non-contiguous array  看报错字面意思,...带着这些疑问,我搜了下资料,stack overflow发现一个比较详细回答,简单明白地将Numpy里面的数组连续性问题解释清楚了,因此这里翻译过来,希望能帮助到别的有同样疑问小伙伴。 ...这个数组看起来结构是这样:   计算机内存里,数组arr实际存储是像下图所示:   这意味着arr是C连续(C contiguous),因为在内存是行优先,即某个元素在内存中下一个位置存储是它同行下一个值...同理,arr.T,列操作比行操作会快些。  4....补充 Numpy中,随机初始化数组默认都是C连续,经过不规则slice操作,则会改变连续性,可能会变成既不是C连续,也不是Fortran连续

    1.9K00

    数据科学 IPython 笔记本 9.5 NumPy 数组计算:通用函数

    9.5 NumPy 数组计算:通用函数 本节是《Python 数据科学手册》(Python Data Science Handbook)摘录。...探索 NumPy ufunc ufunc有两种形式:一元ufunc,它在单个输入运行,二元ufunc,两个输入运行。我们将在这里看到这两种函数例子。...([2, 1, 0, 1, 2]) 相应 NumPy ufunc是np.absolute,也可以别名np.abs下找到: np.absolute(x) # array([2, 1, 0, 1, 2...由于这些软件包文档可在线获取,因此搜索gamma function python通常会找到相关信息。 高级ufunc特性 许多 NumPy 用户没有学习完整特性情况下使用ufunc。...ufunc:了解更多 通用函数更多信息(包括可用函数完整列表)可在 NumPy 和 SciPy 文档站点找到

    93220

    毕设中学习02——numpy多维数组切片,形态变化,维度交换

    —过滤信息 多维矩阵维度顺序变换 多维矩阵切片 多维矩阵形态变化 构建三维数组,并按照指定维度输出 import numpy as np # a=np.arange(0,60,1,dtype=np.floating...,坐标轴是反方向输出) [0, -1, -2, -3, -4, -5, -6, -7, -8, -9] 生成指定范围,指定步长一组数 a=np.arange(1,20,2) import numpy...#输出 (10,) [[ 1 3 5 7 9] [11 13 15 17 19]] 多维数组切片——过滤信息 import numpy as np #按照表达式j*10+i,生成6*6矩阵...假设 a 数组是shape为(7352, 9, 128, 1)numpy数组 方法一: 如果想要数组变换形态,比如使它变成(9, 7352, 128, 1)可以使用transpose方法 b=a.transpose...((1,0,2,3)) #解释:1-0-2-3指就是变换数组维度,明显正常维度是0-1-2-3-4....

    67230

    刷题打卡:两个长度相等排序数组找到上中位数

    【题目】 给定两个有序数组arr1和arr2,已知两个数组长度都为N,求两个数组中所有数中位数。...【难度】 中 【解答】 这道题可以采用递归来解决,注意,这道题数组是有序,所以它有如下特点: (1)、当 两个数组长度为偶数时: 我来举个例子说明他拥有的特点吧。...则数组长度为 n = 4。 ? 分别选出这两个数组中位数下标,即 mid1 = (n-1)/2 = 1。 mid2 = (n - 1)/2 = 1。 ?...(2)、当两个数组长度为奇数时: 假定 arr1 = [1, 2,3,4,5],arr2 = [3,4,5,6,7]。则数组长度为 n = 5。 mid1 = (n-1)/2 = 2。...,把两个数组中较小数返回去 12 if (l1 >= r1) { 13 return Math.min(arr1[l1], arr2[l2]); 14

    1.1K20

    2024-06-01:用go语言,给定一个从0开始索引整数数组 nums 、两个正整数 k 和 dist 。 数组代价是

    2024-06-01:用go语言,给定一个从0开始索引整数数组 nums 、两个正整数 k 和 dist 。 数组代价是数组第一个元素。...问题要求将数组 nums 分割成 k 个连续且不重叠数组, 同时确保第二个到第k个子数组第一个元素与它前面的子数组最后一个元素距离不超过 dist 。...这两个堆用于维持子数组之间距离。 2.初始化堆 l 和 r,将数组 nums 一部分元素(前 dist+2 个)依次加入堆 l 中。...• 维护堆大小,保持堆 l 大小 k-1 和 k+1 之间。 • 计算当前代价和 mn,并更新为当前最小值。 5.最后返回数组第一个元素与最小代价和 mn 和作为最终结果。...总时间复杂度分析: • 初始化堆时间复杂度为 O(dist). • 遍历数组时间复杂度为 O(n), 其中对堆操作时间复杂度为 O(log k).

    9720

    2021-02-26:一个数组arr是二叉树中序遍历结果,每条边开销是节...

    2021-02-26:一个数组arr是二叉树中序遍历结果,每条边开销是节点和子节点乘积,总开销是所有边开销之和。请问最小总开销是多少?...定义二叉树每条边开销为其两端节点权值乘积,二叉树总开销即每条边开销之和。小团按照二叉树中序遍历依次记录下每个节点权值,即他记录下了N个数,第i个数表示位于中序遍历第i个位置节点权值。...之后由于某种原因,小团遗忘了二叉树具体结构。在所有可能二叉树中,总开销最小二叉树被称为最优二叉树。现在,小团请小美求出最优二叉树总开销。...输入描述: 第一行输入一个整数N(1<=N<=300),表示二叉树节点数。 第二行输入N个由空格隔开整数,表示按中序遍历记录下各个节点权值,所有权值均为不超过1000正整数。...输出描述: 输出一个整数,表示最优二叉树总开销。 福哥答案2021-02-26: 自然智慧即可。 1.递归。有代码。 2.记忆化搜索。有代码。

    51710

    Python numpy np.clip() 将数组元素限制指定最小值和最大值之间

    , out=None, **kwargs) 下面这段示例代码使用了 Python NumPy 库来实现一个简单功能:将数组元素限制指定最小值和最大值之间。...如果数组元素小于 1,则元素被设置为 1;如果大于 8,则被设置为 8;如果在 1 到 8 之间,则保持不变。...这意味着它会生成一个包含 0 到 9(包括 0 和 9)数组,并将其赋值变量 a。 print(a) 这行代码打印变量 a 所引用数组,输出应该是:[0 1 2 3 4 5 6 7 8 9]。...此函数遍历输入数组每个元素,将小于 1 元素替换为 1,将大于 8 元素替换为 8,而位于 1 和 8 之间元素保持不变。处理后数组被赋值变量 b。...性能考虑:对于非常大数组,尤其是性能敏感场景下使用时,应当注意到任何操作都可能引入显著延迟。因此,可能情况下预先优化数据结构和算法逻辑。

    21200

    NumPy 获取唯一元素、出现次数、展平数组

    你好 ,我是 zhenguo 本篇文章介绍2个 NumPy 高频使用场景,以及对应API及用法,欢迎学习。 1 如何获得唯一元素和出现次数 使用np.unique可以很容易地找到数组中唯一元素。...要获取NumPy数组中唯一值索引数组中唯一值第一个索引位置数组),只需np.unique()中传递return_index参数: >>> unique_values, indices_list...参数与数组一起传递,以获取NumPy数组中唯一值频率计数。...如果从这个数组开始: >>> a_2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [1, 2, 3, 4]]) 可以通过以下方式找到唯一值...两者之间主要区别在于,使用ravel()创建数组实际是对数组引用(即“视图”)。这意味着对新数组任何更改也将影响数组。因为ravel不创建拷贝,所以它内存效率很高。

    2.2K20

    Java基础系列(四十四):集合之ArrayList

    , /** * 返回用于存储元素数组位于某个索引元素 * @param index 需要返回元素索引 * @return 返回索引位置元素 */...(index); } 可以看出,本质底层还是通过数组来实现,说到对于数组操作,就必须说到这个源码中频繁出现方法 System.arraycopy(Object[] src, int srcPos...,一个是根据元素找到索引进行删除,返回是否删除成功,而一个是根据直接索引进行删除,返回是被删除元素,说起删除,下面我们还会看到一个被private修饰batchRemove(Collection.../** * 将该子集index索引位置设置为e * @param index 被设置索引,这里索引子集相对索引 * @param e...; this.size++; } 这里节选了两段源码解析,我们可以看到,SubList操作基本都是加上偏移量之后对集合进行操作,这里还需要注意一点,如果集合在过程中自行进行了结构性修改

    43820

    NumPy 1.26 中文官方指南(二)

    为此,您需要对数组进行子集、切片和/或索引。 如果你想要选择符合特定条件数组值,使用 NumPy 是很直接。...两者之间主要区别是使用ravel()创建数组实际是对数组引用(即“视图”)。这意味着对新数组任何更改也会影响数组。由于ravel不创建副本,它在内存是高效。...基本,C 和 Fortran 排序与索引数组在内存中存储顺序相对应有关。 Fortran 中,当在内存中移动二维数组元素时,第一个索引是最快变化索引。...为了做到这一点,你需要子集、切片和/或索引数组。 如果你想要选择满足特定条件数组值,使用 NumPy 是非常简单。...两者之间主要区别在于使用ravel()创建数组实际是对数组引用(即“视图”)。这意味着对新数组任何更改都会影响数组。由于ravel不创建副本,因此它内存效率高。

    30610

    6-比较掩码布尔

    我们NumPy数组计算中看到:通用函数,可以使用NumPyufuncs代替循环来对数组进行快速逐元素算术运算。...比较运算符为ufuncs numpy数组通用计算中,我们引入了ufuncs,尤其着重于算术运算符。我们看到在数组使用+,-,*,/和其他会导致按元素进行操作。...它们语法与NumPy版本语法不同,特别是多维数组使用时,将失败或产生意外结果。对于这些示例,请确保使用np.sum(),np.any()和np.all()!...一种更强大模式是使用布尔数组作为掩码,以选择数据本身定子集。...], [False, False, False], [ True, False, False]]) 现在要从数组中选择这些值,我们只需在此布尔数组建立索引即可;这称为屏蔽操作

    1.4K00
    领券