【发布时间】:2011-08-18 23:36:39
【问题描述】:
我需要创建一个长度为n 的NumPy 数组,其中每个元素都是v。
还有什么比:
a = empty(n)
for i in range(n):
a[i] = v
我知道zeros 和ones 适用于v = 0, 1。我可以使用v * ones(n),但它当v 是None 时它不起作用,并且也 s> 会慢很多。
【问题讨论】:
-
在我的电脑上,对于 0 的情况,在循环中使用
a = np.zeros(n)比a.fill(0)快。这与我的预期相反,因为我认为a=np.zeros(n)需要分配和初始化新内存。如果有人能解释一下,我将不胜感激。 -
你不能把 None 放在一个 numpy 数组中,因为单元格是用特定的数据类型创建的,而 None 有它自己的类型,实际上是一个指针。
-
@Camion 是的,我现在知道了 :) 当然
v * ones(n)仍然很糟糕,因为它使用了昂贵的乘法。不过,将*替换为+,而v + zeros(n)在某些情况下会出奇地好(stackoverflow.com/questions/5891410/…)。 -
max,而不是在添加 v 之前创建一个带有零的数组,使用
var = np.empty(n)创建它为空然后用 'var[:] = v' 填充它会更快。 (顺便说一句,np.full()和这个一样快)