3 回答

TA貢獻1798條經驗 獲得超3個贊
只是替代解決方案:鑒于x您的輸入list,您可以使用ravel()NumPy作為
xlst = list(np.array(x).ravel())
print (xlst)
或者您可以將其flatten()用作
xlst = list(np.array(x).flatten())
print (xlst)
如果您只想將最終答案作為數組,則無需放在list之后=。并且,如果您的輸入x已經是numpy array類型,請替換np.array(x).ravel()為x.ravel()。
或者,如上面的答案中已經提到的list(),您也可以使用np.array(x).flatten().tolist()和來代替轉換為列表np.array(x).ravel().tolist()
出于以下一種答案中的注釋(感謝評論者)的啟發,對本頁列出的所有可能答案進行了一些時間分析(由于格式問題,很容易將其放在此處而不是注釋中):
x = np.array([np.array([i]) for i in range(100000)])
%timeit np.concatenate(x).tolist()
%timeit np.hstack(x).tolist()
%timeit x.flatten().tolist()
%timeit x.ravel().tolist()
輸出
10 loops, best of 3: 55.2 ms per loop
10 loops, best of 3: 155 ms per loop
100 loops, best of 3: 2.45 ms per loop
100 loops, best of 3: 2.29 ms per loop

TA貢獻1827條經驗 獲得超8個贊
使用np.concatenate以避免手動迭代:
my_list = [np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032])]
new_list = np.concatenate(my_list).tolist()
>>> new_list
[3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
基準測試:
根據評論中的廣泛討論,這是我的基準測試:
my_list = [np.random.randn(1) for _ in range(100000)]
def concat_method(my_list=my_list):
return np.concatenate(my_list).tolist()
def hstack_method(my_list=my_list):
return np.hstack(my_list).tolist()
def flatten_method(my_list=my_list):
return np.array(my_list).flatten().tolist()
def ravel_method(my_list=my_list):
return np.array(my_list).ravel().tolist()
import timeit
>>> timeit.timeit(concat_method, number=100) / 100
0.025655772869977226
>>> timeit.timeit(hstack_method, number=100) / 100
0.1172302443100125
>>> timeit.timeit(ravel_method, number=100) / 100
0.041237239889997
>>> timeit.timeit(flatten_method, number=100) / 100
0.0412076849100049

TA貢獻1815條經驗 獲得超13個贊
通過使用 hstack
np.hstack(my_list).tolist()
Out[180]: [3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
添加回答
舉報