python numpy 寻找元素位置 numpy查找元素

高效的论文探讨了如何在numpy中地检查一个3d阵列(源)中的每个二维子阵列(例如)是否存在另一个可能更短的包含重复项的3d阵列(值)提供了两种主要的解决方案:一种是利用字符串转换结合np.in1d进行精确匹配,另一种是利用numpy的广播机制进行直接的逻辑比较。终结方法都附有代码示例,并分析了其优缺点及适用场景。
在数据处理和科学计算中,否存在于另一种对于一维数据库,NumPy 提供了 np.in1d 等函数。然而,在处理多维数据库时,特别是需要检查高维数据库中的“子数据库”是否存在于接下来的教程中一个具体的 3D 场景数据库中,介绍两种有效的解决方案。问题描述
假设我们有两个 NumPy 3D 数据库:source 我们的目标是生成一个布尔数据库,其长度与source 数据库的第二维(即可用数量)相同。如果source 中的某个支持(例如)在values备份中存在,则对应位置为True,否则为False。
示例数据:import numpy as npsource = np.array([[,,,,,,]])values = np.array([[,,,,]])#期望输出:[False,False,True,True,False,False,True]登录后复制
直接使用np.isin(source,values).all(axis=2) np.in1d 默认处理一维阵列,需要解决的转换才能应用说明:字符串转换与 np.in1d 结合
这种方法的核心思想是 3D 阵列中的每个 2D 子阵列(即每次清洗)为一个唯一的字符串表示。这样,我们就可以将高维阵列的比较问题转化为一维字符串阵列的比较问题,从而利用 np.in1d的强大功能。
实现步骤:将source和values apply_along_axis np.apply_along_axis函数,沿着最内层轴(axis=2)将每个修剪的元素拼接成一个字符串。 np.in1d。
示例代码:#确保数据类型适合字符串转换,这里使用astype(str)source_str = np.apply_along_axis(''.join, 2, source.astype(str))values_str = np.apply_along_axis(''.join, 2,values.astype(str))result_in1d = np.in1d(source_str, values_str)print(quot;方案一结果:quot;, result_in1d)# 输出:方案一结果:[False False True True False False True]登录后复制
优点:腾讯清晰混元3D
腾讯推出的一站式3D内容创作平台240查看详情逻辑场景,易于理解。对于匹配非常有效。适用于各种数据类型,只要它们能被视为有用的字符串。
缺点:字符串转换和粘贴操作可能会带来额外的性能开销,特别是对于非常大的吞吐量。如果提供元素数量巨大,生成的字符描述:利用广播机制进行逻辑比较
这种方法利用了NumPy强大的广播功能,通过巧妙的维度变换和预防逻辑,直接在数值维度进行比较,避免了字符串的顶点。
实现步骤:调整source: source:valuesofvalues:源:的第二维(索引为1)后插入一个新轴,便于与值的第一维(索引为0)对齐。执行要素级别的可用性检查(==)。这将生成一个布尔备份,指示源中的每个连接与值中的每个连接之间的元素匹配情况。沿最内层轴(axis=2)使用all() Any()源中的当前连接是否与值中的任何一个连接完全匹配。
示例代码:# source_reshape: (1, 7, 1, 3)#values: (1, 5, 3)#比较时,values 会被广播到 (1, 1, 5, 3)# source_reshape 会被广播到 (1, 7, 1, 3)# 结果将是 (1, 7, 5, 3) Comparison = (source[:, :,None, :] ==values[:,None, :, :])# (1, 7, 5)all_elements_match = Comparison.all(axis=3)#检查源中的每个支持是否与values中的任何一个支持匹配(axis=2)#结果将为(1,7)result_broadcast = all_elements_match.any(axis=2).squeeze()print(quot;方案二结果:quot;, result_broadcast)#输出: 方案二结果: [False False True True False False True]#简化写法(更紧凑,但理解可能稍难)# source.transpose(1,0,2) 将 (1,7,3) 相当于 (7,1,3)#values(1,5,3)# (source.transpose(1,0,2) ==values) 会广播为 (7,5,3)# .all(2) 检查每个 (7,5) 组合的校验是否完全匹配,结果为 (7,5)# .any(1) 检查(7)中的每个向量是否与values中的任何一个匹配,结果为 (7)result_broadcast_simplified = (source.transpose(1,0,2) ==values).all(2).any(1)print(quot;方案二简化结果:quot;, result_broadcast_simplified)# 输出:方案二简化结果: [False False True True False False True]登录后复制
优点:通常比字符串转换方法更快,因为它直接在数值层面操作。更符合NumP y的“支撑化”编程范式。内存效率可能更高,取决于广播的实现和中间结果的大小。
缺点:对于非常大的值集群,广播操作可能会产生巨大的中间负载,从而导致内存消耗过大(“可能是内存”理解和调试架构转换和广播逻辑可能需要一定的 NumPy 经验。选择合适的方案
在实际应用中,根据具体的数据特性和性能需求选择哪种方案:数据类型:如果包含非数值类型或复杂对象,字符串转换可能是更通用和可靠的选择。 负载大小:对于值 负载相对较小的情况,广播方法通常更快且内存可控。读写非常大,可能导致广播操作产生内存严重溢出时,字符串转换方法可能安全,尽管性能可能稍差。性能要求:果对性能有极高的要求,建议对两种方法进行基准测试,每种方法在特定的数据集上表现最佳。
总结
论文介绍了 NumPy 中检查 3D 数据库子程序的两个 3D阵列中的方法。无论是通过字符串转换结合np.in1d,还是利用NumPy的广播机制进行逻辑比较,都能够有效地解决这类更多的查找问题。理解大量方法的原理、优缺点和适用场景,有助于开发者面对不同的需求求时做出明智的选择,从而编写出健壮的 NumPy 高效代码。
以上就是在 NumPy 中高效检查 3D 备份子元素是否存在于另一个 3D 备份中的详细内容,更多请关注乐哥常识网其他相关文章! app字符串数组 numpy 数据类型 多维数组 字符串值类型 字符串类型 类型转换对象大家都在看: python抢票神器app 第一个完全多GPU支持且非常先进的带Gradio接口的批量图像字幕生成器APP发布如何利用Python开发App 利用Python开发App实战可以搜Python题答案的APP有哪些?
