我有一个1D数组在Numpy和我想找到的索引的位置,其中一个值超过了Numpy数组中的值。
例如。
aa = range(-10,10)
在aa
中查找超过5
值的位置。
我对此也很感兴趣,我已经将所有建议的答案与填充图进行了比较。(免责声明:我是的作者。)
如果您知道正在查看的数组已排序,则
numpy.searchsorted(a, alpha)
这是给你的。它是O(log(n))操作,即速度几乎不取决于阵列的大小。你再快不过了。
如果你对你的阵列一无所知,你不会错的
numpy.argmax(a > alpha)
已排序:
未分类:
重现情节的代码:
import numpy
import perfplot
alpha = 0.5
numpy.random.seed(0)
def argmax(data):
return numpy.argmax(data > alpha)
def where(data):
return numpy.where(data > alpha)[0][0]
def nonzero(data):
return numpy.nonzero(data > alpha)[0][0]
def searchsorted(data):
return numpy.searchsorted(data, alpha)
perfplot.save(
"out.png",
# setup=numpy.random.rand,
setup=lambda n: numpy.sort(numpy.random.rand(n)),
kernels=[argmax, where, nonzero, searchsorted],
n_range=[2 ** k for k in range(2, 23)],
xlabel="len(array)",
)
给定数组的排序内容,还有一个更快的方法:搜索排序。
import time
N = 10000
aa = np.arange(-N,N)
%timeit np.searchsorted(aa, N/2)+1
%timeit np.argmax(aa>N/2)
%timeit np.where(aa>N/2)[0][0]
%timeit np.nonzero(aa>N/2)[0][0]
# Output
100000 loops, best of 3: 5.97 µs per loop
10000 loops, best of 3: 46.3 µs per loop
10000 loops, best of 3: 154 µs per loop
10000 loops, best of 3: 154 µs per loop
这要快一点(而且看起来更好)
np.argmax(aa>5)
In [2]: N = 10000
In [3]: aa = np.arange(-N,N)
In [4]: timeit np.argmax(aa>N/2)
100000 loops, best of 3: 52.3 us per loop
In [5]: timeit np.where(aa>N/2)[0][0]
10000 loops, best of 3: 141 us per loop
In [6]: timeit np.nonzero(aa>N/2)[0][0]
10000 loops, best of 3: 142 us per loop
问题内容: 我在numpy中有一个1D数组,我想在值超过numpy数组中的值的位置找到索引的位置。 例如 查找超出值的位置。 问题答案: 这有点快(看起来更好) 因为将在第一个位置停止(“如果多次出现最大值,则返回对应于第一个出现的索引。”)并且不会保存其他列表。
我正在尝试计算Pandas数据帧中一个值与另一个值一起出现的次数,并计算每行的次数。 这就是我的意思: 假设我想计算与,我希望结果是: 这里的< code>freq(频率)列表示< code>a列中的值与< code>t列中的值一起出现的次数。 请注意,考虑到我的数据帧的大小,仅计算发生的次数的解决方案将导致错误的频率。 有没有办法在Python中实现这一点?
我需要找到高于指定阈值的的第一个和最后一个元素。我找到了以下解决方案,这是有效的,但它看起来有点令人费解。有没有更简单/更蟒蛇的方式?
newitems[0]是直接拿到了区县的值了,现在是点击了区县追加给给this.ruleForm.address,现在点了第一个是正常的,第二次点击会追加、第三次也是点也是会追加,这不是我想要的效果 想要的效果是 点了第一次的值,赋给this.ruleForm.address,点了第二次就把第一次的值替换,第三次替换上一次的值,大佬们这个 要怎么弄呢?
问题内容: 我需要一种快速的方法来保持运行最大的numpy数组。例如,如果我的数组是: 我想要: 显然我可以做一个小循环: 但是我的数组有成千上万的条目,我需要多次调用。似乎必须要有一个小技巧才能删除循环,但我似乎找不到任何有效的方法。另一种选择是将其编写为C扩展,但似乎我会重新发明轮子。 问题答案: 为我工作。