我有以下数组:
a = np.array([6,5,4,3,4,5,6])
现在我想得到所有大于4但索引值大于2的元素。 我发现的方法如下:
a[2:][a[2:]>4]
有没有更好或更可读的方法来实现这一点?你知道吗
更新: 这是一个简化版本。实际上,索引是通过对以下几个变量进行算术运算完成的:
a[len(trainPredict)+(look_back*2)+1:][a[len(trainPredict)+(look_back*2)+1:]>4]
trainPredict
是一个numpy数组,look_back
是一个整数。
我想看看是否有一个既定的方式或其他人如何做到这一点。你知道吗
@AlexanderCécile's answer不仅比您发布的一行代码更清晰,而且还消除了临时数组的冗余计算。尽管如此,它似乎并不比您原来的方法快。你知道吗
下面的计时都是在初始设置为
N
在1e3到1e8之间变化,系数为10。我尝试了四种不同的代码:result = a[2:][a[2:] > 4]
s = a[2:]; result = s[s > 4]
result = a[np.flatnonzero(a[2:]) + 2]
result = a[(a > 4) & (np.arange(a.size) >= 2)]
在所有情况下,都是通过在命令行上运行
这里,
N
是3到8之间的10的幂,而<X>
是上面的表达式之一。时间安排如下:方法#1和#2几乎无法区分。令人惊讶的是,在~5e3到~1e6个元素之间,方法#3似乎稍微快了一点,但明显快了很多。我通常不会从花哨的索引中想到这一点。方法4当然是最慢的。你知道吗
以下是完整的数据:
如果您担心切片的复杂性和/或条件的数量,您可以随时将它们分开:
你的例子很简单吗?对于更复杂的操作,可能有更好的解决方案。你知道吗
相关问题 更多 >
编程相关推荐