问题标签 [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.
python - 带有 if 语句的 Python Numba jit 函数
我有一个分段函数,它包含 3 个部分,我正在尝试使用 Numba @jit 指令在 Python 中编写。该函数是在数组上计算的。函数定义为:
我正在使用 Numba 使这段代码非常快,并在我的 CPU 的所有 8 个线程上运行它。
现在,我的问题是,如果我想将函数的每个部分分别定义为f1
,f2
和f3
, 并将它们放在 if 语句中(并且仍然受益于 Numba 速度),我该怎么做?原因是子函数可能更复杂,我不想让我的代码难以阅读。我希望它和这个一样快(或者稍微慢一点但不是很多)。
为了测试功能,我们可以使用这个数组:
为了完成主义,调用了以下库:
所以在这种情况下,函数将是:
实际函数是这些,用于层流、过渡和湍流状态的光滑管道摩擦系数:
感谢大家的贡献。这是 numpy 解决方案(由于某种原因,最后的树线很慢,但不需要预热):
最快的 Numba 解决方案,允许传递函数名称并利用 prange(但受到 jit 预热的阻碍)是这样的,它可以与第一个解决方案一样快(问题的顶部):
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,)]。
如果只有一个布尔数组而没有整数索引数组,这很简单。只需要注意确保布尔索引的维度与它应该使用的维度一样多。
python - 高级布尔索引
我想通过掩码选择值并使用掩码数组更改值。
代码:
我想要结果:
但我得到错误:
ValueError: setting an array element with a sequence.
a[mask] = (1, 2, 2)
如果尝试做数组之类的事情
但我需要使用 x 的值。让它看起来像
我该怎么做?
pandas - 如何在 Pandas 中使用掩码捕获所有符合要求的值?
在一个特定数据框列中执行的 Value_counts 直观地显示有 441 个值低于 10。当我运行掩码(布尔索引)以访问这些值时,它只获得 441 个中的 12 个。
我认为这是一个数据类型问题。但是,在上述操作之前,我使用 astype 函数将列数据类型更改为浮点数。数据类型应该没有问题。
python - Python/Numpy/Boolean Indexing:对于数组中的每个 True 值,修改接下来的 2 个元素
我有一个 numpy 数组
我创建一个带有布尔索引的掩码,如下所示:
这给出了一个像
True
我可以得到掩码中的值的索引
这给
对于掩码中的每个True
值,我想将接下来的 2 个元素也修改为True
.
我可以用这样的for
循环来做到这一点:
在不使用循环的情况下,是否有更 numpythonic 的方法for
?
所需的掩码输出:
这里的主要优先事项是性能。
python - 如何使用多个字符串条件加速熊猫布尔索引
我有一个 7300 万行数据集,我需要过滤掉与几个条件中的任何一个匹配的行。我一直在使用布尔索引进行此操作,但这需要很长时间(约 30 分钟),我想知道是否可以使其更快(例如花式索引、np.where、np.compress?)
我的代码:
正则表达式字符串是
其他三个条件是少于 50 项的字符串列表。
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
什么有效:
- 使用虚拟轴将 b 的形状从 (2x3) 更改为 (2,1,3)
- 将 a 从 (4x3) 重塑为 (2,2,3)。我们称之为 a_reshape
a_reshape[:,0:1,:][b] = 100
a_reshape[:,1:2,:][b] = 100
什么不起作用
如果我尝试一次更改两列,即
我收到以下错误:
我可以添加a和b。在这种情况下,广播工作。但是我无法在索引时进行广播。
如果有人能解释为什么会这样,我将不胜感激。还有一种更好(更快)的方法来实现上述代码吗?任何提示将不胜感激。
谢谢
"""
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),但是我仍然想知道其他解决方案有什么问题。
python - Python/Numpy/布尔索引:在具有 N 个连续真值的位置修改布尔数组
给定一个 numpy 布尔数组
我想指出至少有n
连续真实值的位置(从左到右)。
对于n = 2
:
对于n = 3
:
在不使用 for 循环遍历每个元素的情况下,是否有一种 Pythonic 方法?性能在这里很重要,因为我的应用程序将在包含 1000 个元素的布尔数组上执行此操作 1000 次。
值得一提的注意事项:
- n可以是大于 2 的任何值
- n 个连续的模式可以出现在数组的任何位置;开头、中间或结尾。
- 结果数组的形状必须与原始数组的形状相匹配。
任何帮助将不胜感激。
答案的基准