给定一个numpy数组:
x = np.array([False, True, True, False, False, False, False, False, True, False])
如何找到值从False转换为True的次数?对于上面的示例,答案将是2。我 不想 在计数中包括从True到False的转换。
从“如何识别布尔数组中的值序列”的答案?,以下代码将生成将要更改值的索引,这不是我想要的,因为其中包括True-
False转换。
np.argwhere(np.diff(x)).squeeze()
# [0 2 7 8]
我知道可以通过遍历数组来完成此操作,但是我想知道是否有更快的方法?
获取一次性切片-
x[:-1]
(从第一个elem开始,到最后一个elem结束)和x[1:]
(从第二个elem开始,一直到结束),然后寻找第一个小于第二个elem的切片,即抓住的格局[False, True]
终于得到计数用ndarray.sum()
或np.count_nonzero()
-
(x[:-1] < x[1:]).sum()
np.count_nonzero(x[:-1] < x[1:])
另一种方法是查找第一个切片为False
,第二个切片为True
,想法再次是捕获[False, True]
-
(~x[:-1] & x[1:]).sum()
np.count_nonzero(~x[:-1] & x[1:])
问题内容: 我有以下数组 我想找到连续为零的数组的开始和结束索引,输出上方的数组如下所示 我想做得尽可能高效。 问题答案: 这是一个相当紧凑的矢量化实现。我已经更改了一些要求,所以返回值有点“ numpythonic”:它创建一个形状为(m,2)的数组,其中m是零的“游程”数。第一列是每次运行中前0个的索引,第二列是运行后第一个非零元素的索引。(例如,此索引模式匹配切片的工作方式以及函数的工作方式
问题内容: 是否有numpy-thonic方法(例如函数)在数组中查找最接近的值? 例: 问题答案:
问题内容: 我想获取与行匹配的二维Numpy数组的索引。例如,我的数组是这样的: 我想获取与行[0,1]相匹配的索引,该行是索引3和15。当我执行类似的操作时,… 我想要索引数组([3,15])。 问题答案: 您需要使用函数来获取索引: 或者,如文档所述: 如果仅给出条件,则返回 您可以直接调用返回的数组: 分解: 并在该数组上调用方法(使用)可为您提供两个均为True的位置: 并获取哪些索引是:
问题内容: 在numpy数组中找到最大连续重复nan的最佳方法是什么? 例子: 输入1: 输出1: 输入2: 输出2: 问题答案: 这是一种方法- 这是一个改进的版本- 基准测试-
问题内容: 我只需要找到1D中最小的第n个元素。 例如: 我想获得第五个最小的元素,所以我想要的输出是。 我当前的解决方案是这样的: 但是,找到5个最小的元素然后再选择最大的元素对我来说似乎很笨拙。有更好的方法吗?我是否缺少一个可以实现目标的功能? 有些问题的标题与此相似,但我没有看到任何答案。 编辑: 我本来应该提到它,但是性能对我来说很重要。因此,虽然不错的解决方案对我来说不起作用。 结果:
问题内容: 使用括号时,这些语句为什么能按预期工作: 但是 ,如果没有括号,它会返回吗? 问题答案: 基于有关操作符优先级的python 文档 : 请注意,比较,成员资格测试和身份测试均具有相同的优先级,并且具有“比较”部分中所述的从左到右的 链接 功能。 因此,实际上您有一个链接语句,如下所示: 您可以假定中心对象将在2个操作和其他对象之间共享(在这种情况下为False)。 并且请注意,对于所有
问题内容: 我有两个numpy数组: 我想从p_rem中的p_a_colors中删除所有列,所以我得到: 我认为,某些事情应该像 但我只是不知道轴或[:]正确。 我知道 可以,但是我试图避免(python)循环,因为我也想要正确的性能。 问题答案: 这就是我要做的: 您需要执行void dtype事情,以便numpy整体比较行。之后,使用内置的set例程似乎是显而易见的方法。
问题内容: 我有一个数组: 我希望在此数组中找到多个值的行的索引: 对于此示例,我想要一个类似的结果: 我有一个执行此操作的代码,但我认为它过于复杂: 我找到了类似问题的答案,但仅适用于一维数组。 有没有一种方法可以更简单地完成我想要的工作? 问题答案: 方法1 一种方法是像这样 方法#2 一种内存有效的方法是将每一行转换为等效的线性索引,然后使用np.in1d,例如, 方法3 使用np.sear