我需要创建一个长度为n的NumPy数组,其中每个元素都是v。
还有什么比:
a = empty(n)
for i in range(n):
a[i] = v
我知道0和1适用于v = 0,1。我可以用v * ones(n),但当v为None时行不通,也会慢得多。
我需要创建一个长度为n的NumPy数组,其中每个元素都是v。
还有什么比:
a = empty(n)
for i in range(n):
a[i] = v
我知道0和1适用于v = 0,1。我可以用v * ones(n),但当v为None时行不通,也会慢得多。
当前回答
显然,不仅绝对速度,而且速度顺序(如user1579844所报告的)都与机器有关;以下是我的发现:
一个= np.empty (1 e4);A.fill(5)是最快的;
按速度递减排列:
timeit a=np.empty(1e4); a.fill(5)
# 100000 loops, best of 3: 10.2 us per loop
timeit a=np.empty(1e4); a[:]=5
# 100000 loops, best of 3: 16.9 us per loop
timeit a=np.ones(1e4)*5
# 100000 loops, best of 3: 32.2 us per loop
timeit a=np.tile(5,[1e4])
# 10000 loops, best of 3: 90.9 us per loop
timeit a=np.repeat(5,(1e4))
# 10000 loops, best of 3: 98.3 us per loop
timeit a=np.array([5]*int(1e4))
# 1000 loops, best of 3: 1.69 ms per loop (slowest BY FAR!)
所以,试着找出答案,并使用你平台上最快的方法。
其他回答
没有numpy
>>>[2]*3
[2, 2, 2]
我相信填充是最快的方法。
a = np.empty(10)
a.fill(7)
您还应该始终避免像您在示例中所做的那样进行迭代。简单的A [:] = v将完成使用numpy广播所做的迭代。
我们也可以写成
v=7
n=5
a=np.linspace(v,v,n)
显然,不仅绝对速度,而且速度顺序(如user1579844所报告的)都与机器有关;以下是我的发现:
一个= np.empty (1 e4);A.fill(5)是最快的;
按速度递减排列:
timeit a=np.empty(1e4); a.fill(5)
# 100000 loops, best of 3: 10.2 us per loop
timeit a=np.empty(1e4); a[:]=5
# 100000 loops, best of 3: 16.9 us per loop
timeit a=np.ones(1e4)*5
# 100000 loops, best of 3: 32.2 us per loop
timeit a=np.tile(5,[1e4])
# 10000 loops, best of 3: 90.9 us per loop
timeit a=np.repeat(5,(1e4))
# 10000 loops, best of 3: 98.3 us per loop
timeit a=np.array([5]*int(1e4))
# 1000 loops, best of 3: 1.69 ms per loop (slowest BY FAR!)
所以,试着找出答案,并使用你平台上最快的方法。
您可以使用numpy。瓷砖,例如:
v = 7
rows = 3
cols = 5
a = numpy.tile(v, (rows,cols))
a
Out[1]:
array([[7, 7, 7, 7, 7],
[7, 7, 7, 7, 7],
[7, 7, 7, 7, 7]])
尽管tile是为了“平铺”一个数组(而不是在这种情况下的标量),它将完成工作,创建任何大小和维度的预填充数组。