Jul*_*neB 1 python numpy python-3.x
有没有一种快速的方法来在python中创建具有1和x * 0的向量?
我想吃点东西
a = [1,0,0,0,0,0,0,0,0,...,0]
b = [1,1,0,0,0,0,0,0,0,...,0]
Run Code Online (Sandbox Code Playgroud)
我用列表尝试过,但看到你自己:(
list = [1, n*[0]]
list = np.array(list)
print(list)
==> [1 list([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])]
Run Code Online (Sandbox Code Playgroud)
为获得最佳性能,请参阅numpy下面AMC 的回答。
unpacking只需在代码中添加星号即可使用:[1, *n*[0]]而不是[1, n*[0]]:
>>> arr = np.array([1, *n*[0]])
Run Code Online (Sandbox Code Playgroud)
array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
Run Code Online (Sandbox Code Playgroud)
适当的NumPy解决方案:
import numpy as np
n = 10
arr = np.zeros(shape=n + 1, dtype=np.int64)
arr[0] = 1
Run Code Online (Sandbox Code Playgroud)
结果是: [1 0 0 0 0 0 0 0 0 0 0]
这是我们要比较的功能:
def func_1(n):
return np.array([1, *n*[0]])
def func_2(n):
arr = np.zeros(shape=n + 1, dtype=np.int64)
arr[0] = 1
return arr
def func_3(n):
return np.array([1] + n * [0])
def func_4(n):
return np.array([1] + [0 for _ in range(n)])
def func_5(n):
return np.array([1].extend((0 for _ in range(n))))
def func_6(n):
return np.array([1].extend([0 for _ in range(n)]))
def func_7(n):
arr = [0 for _ in range(n)]
arr[0] = 1
return np.array(arr)
Run Code Online (Sandbox Code Playgroud)
结果timeit为arr_size = 100000000:
%timeit func_1(arr_size)
1个循环,最佳3:每个循环7.3 s
%timeit func_2(arr_size)
10次循环,最佳3:每个循环177毫秒
%timeit func_3(arr_size)
1个循环,每个循环最好3:7.26 s
%timeit func_4(arr_size)
1次循环,每循环3:11.4 s最佳
%timeit func_5(arr_size)
1个循环,最佳3:每个循环6.3 s
%timeit func_6(arr_size)
1次循环,每循环3:4.95 s最佳
%timeit func_7(arr_size)
1个循环,每个循环最好3:10.6 s
| 归档时间: |
|
| 查看次数: |
68 次 |
| 最近记录: |