我想填充一个大小为n的数组(一个非常大的数组):
1 for i = 1, (n/2)+1
^{pr2}$
^{3}$
是遍历0到n并对每个语句使用if语句和%的最快方法吗?在
像这样:
array = []
for index in range(1,n):
if index == 1 or (index % ((n/2)+1) == 0):
array.append(1)
if index == 2 or index == 3 or (index % (n/2) == 0):
array.append(2)
if (index % ((n/2)+2) == 0):
array.append(0)
我试着想其他办法来做这件事,但我没有想出任何办法。我不是一个程序员的行业,但我不确定我将如何实现这一点。在
构造这样一个集合的最有效方法是使用numpy数组。在
我们可以用以下方法构建:
例如:
^{pr2}$计时:
对于
n=100_000
,我们得到:对于
n=1_000_000
,我们得到:生成100k个元素的数组,因此大约需要(包括
partial
等的小开销)107.64µs,生成1M元素的数组需要6448.31µs。在因为其他答案都是和numpy数组一起使用的,速度非常快,为了完整起见,我想添加一些其他答案。(在最初的问题中,如果n是奇数怎么办,以及作者期望的是从零开始还是从一开始的索引,这显然有些模糊。)
你可以很简单地使用列表理解来创建一个列表
但是更快的方法是通过扩展类来扩展列表的功能:
^{pr2}$您可以调用整个列表,也可以只调用单个元素。创建整个列表仍然很慢。在
您可能需要使用} 连接多个切片,并使用它们对数组进行切片分配:
numpy
来完成此操作。您可以使用^{相关问题 更多 >
编程相关推荐