问题标签 [boolean-indexing]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
45 浏览

python - 使用 Pandas 在 DataFrame 中插入自定义系列作为新列

给定这个带有列的 DataFrame:categoryYearProfit

在此处输入图像描述

如何在不手动输入数字的情况下Numbering 按以下规则插入数字以创建新列:

  1. 插入0对应的Year < 3.
  2. 用插入1一个单元格Year >= 3
  3. 之后插入一个具有共同比率的几何级数0.5对应的Year >= 3

愿望输出显示如下:

在此处输入图像描述

0 投票
2 回答
1769 浏览

python - 带有 if 语句的 Python Numba jit 函数

我有一个分段函数,它包含 3 个部分,我正在尝试使用 Numba @jit 指令在 Python 中编写。该函数是在数组上计算的。函数定义为:

我正在使用 Numba 使这段代码非常快,并在我的 CPU 的所有 8 个线程上运行它。

现在,我的问题是,如果我想将函数的每个部分分别定义为f1,f2f3, 并将它们放在 if 语句中(并且仍然受益于 Numba 速度),我该怎么做?原因是子函数可能更复杂,我不想让我的代码难以阅读。我希望它和这个一样快(或者稍微慢一点但不是很多)。

为了测试功能,我们可以使用这个数组:

为了完成主义,调用了以下库:

所以在这种情况下,函数将是:

实际函数是这些,用于层流、过渡和湍流状态的光滑管道摩擦系数:

感谢大家的贡献。这是 numpy 解决方案(由于某种原因,最后的树线很慢,但不需要预热):

最快的 Numba 解决方案,允许传递函数名称并利用 prange(但受到 jit 预热的阻碍)是这样的,它可以与第一个解决方案一样快(问题的顶部):

0 投票
1 回答
156 浏览

python - 布尔索引行为的解释

对于二维数组 y:

所有索引都选择第 1、第 3 和第 5 行。这很清楚。

问题

请帮助了解产生结果的规则或机制。

用元组替换[]会产生一个形状为 (0, 5, 4) 的空数组。

使用单个True添加一个新轴。

添加额外的布尔值 True 产生相同的结果。

但是,添加 False boolean 会再次导致空数组。

不确定文档解释了这种行为。

通常,如果索引包含布尔数组,则结果与将 obj.nonzero() 插入同一位置并使用上述整数数组索引机制相同。x[ind_1, boolean_array, ind_2] 等价于 x[(ind_1,) + boolean_array.nonzero() + (ind_2,)]。

如果只有一个布尔数组而没有整数索引数组,这很简单。只需要注意确保布尔索引的维度与它应该使用的维度一样多。

0 投票
1 回答
40 浏览

python - 高级布尔索引

我想通过掩码选择值并使用掩码数组更改值。

代码:

我想要结果:

但我得到错误: ValueError: setting an array element with a sequence.

a[mask] = (1, 2, 2) 如果尝试做数组之类的事情

但我需要使用 x 的值。让它看起来像

我该怎么做?

0 投票
1 回答
32 浏览

pandas - 如何在 Pandas 中使用掩码捕获所有符合要求的值?

在一个特定数据框列中执行的 Value_counts 直观地显示有 441 个值低于 10。当我运行掩码(布尔索引)以访问这些值时,它只获得 441 个中的 12 个。

我认为这是一个数据类型问题。但是,在上述操作之前,我使用 astype 函数将列数据类型更改为浮点数。数据类型应该没有问题。

0 投票
1 回答
107 浏览

python - Python/Numpy/Boolean Indexing:对于数组中的每个 True 值,修改接下来的 2 个元素

我有一个 numpy 数组

我创建一个带有布尔索引的掩码,如下所示:

这给出了一个像

True我可以得到掩码中的值的索引

这给

对于掩码中的每个True值,我想将接下来的 2 个元素也修改为True.

我可以用这样的for循环来做到这一点:

在不使用循环的情况下,是否有更 numpythonic 的方法for

所需的掩码输出:

这里的主要优先事项是性能。

0 投票
2 回答
156 浏览

python - 如何使用多个字符串条件加速熊猫布尔索引

我有一个 7300 万行数据集,我需要过滤掉与几个条件中的任何一个匹配的行。我一直在使用布尔索引进行此操作,但这需要很长时间(约 30 分钟),我想知道是否可以使其更快(例如花式索引、np.where、np.compress?)

我的代码:

正则表达式字符串是

其他三个条件是少于 50 项的字符串列表。

0 投票
0 回答
38 浏览

numpy-ndarray - 对 numpy 数组使用布尔索引时形状不匹配

我正在尝试用 numpy 数组实现一个简单的算法。下面是我想要完成的一个例子。

设 a 为 4x3 形状的 numpy 数组

设 b 为形状为 2x3 的布尔数组

b[0,0] 为真。所以我想要 a[0:2,0] = 100

b[1,2] 为真。所以我想要 a[2:4,2] = 100

即如果 b[row,col] 为真,我想要a[2*row:2*(row+1),col] = 100

什么有效:

  1. 使用虚拟轴将 b 的形状从 (2x3) 更改为 (2,1,3)
  2. 将 a 从 (4x3) 重塑为 (2,2,3)。我们称之为 a_reshape
  3. a_reshape[:,0:1,:][b] = 100
  4. a_reshape[:,1:2,:][b] = 100

什么不起作用

如果我尝试一次更改两列,即

我收到以下错误:

我可以添加a和b。在这种情况下,广播工作。但是我无法在索引时进行广播。

如果有人能解释为什么会这样,我将不胜感激。还有一种更好(更快)的方法来实现上述代码吗?任何提示将不胜感激。

谢谢

"""

0 投票
1 回答
68 浏览

python - Numpy 布尔索引分配有时会失败并分配整个数组

我想简单地为数组的每个元素分配一个标签,基于它低于或高于某个阈值,并使用布尔索引解决这个问题:

到目前为止,一切都很好。我创建了一些虚拟数组来检查它是否有效:

......似乎确实如此。

但是,在我的特定应用程序中,出现了一些其他数组 - 相同的形状、类型和 dtype,但结果不同:

--> 突然之间,所有元素都被标记为正数,即使数组中包含明显低于 5 的数字。据我所知,索引仍然有效,所以如果我要求 arr[mask],我会得到正确的元素,但是分配给它会产生这个错误的结果。

更奇怪的是:在写下这个问题时,我想简化上面的表达式,而不必做“test_arr3 = test_arr3[:, 1:3]”部分,所以我直接输入了我想要的数组:

......突然它起作用了。即使数组是相同的(至少看起来如此)!

我确保所有测试数组都具有相同的类型、形状和 dtype:

我假设数组有某种我不知道的隐藏属性,整件事对我来说意义不大——有人知道吗?


一种解决方法似乎是使用 np.chararray(arr.shape, unicode=True) 而不是 np.empty_like(arr, dtype=str),但是我仍然想知道其他解决方案有什么问题。

0 投票
3 回答
144 浏览

python - Python/Numpy/布尔索引:在具有 N 个连续真值的位置修改布尔数组

给定一个 numpy 布尔数组

我想指出至少有n连续真实值的位置(从左到右)。

对于n = 2

对于n = 3

在不使用 for 循环遍历每个元素的情况下,是否有一种 Pythonic 方法?性能在这里很重要,因为我的应用程序将在包含 1000 个元素的布尔数组上执行此操作 1000 次。

值得一提的注意事项:

  1. n可以是大于 2 的任何值
  2. n 个连续的模式可以出现在数组的任何位置;开头、中间或结尾。
  3. 结果数组的形状必须与原始数组的形状相匹配。

任何帮助将不胜感激。

答案的基准