将包含多个numpy数组的列表转换为单个numpy数组。

问题描述 投票:0回答:1

我有一个列表,看起来是这样的(这是一个子集)。

[array([[1.]]), array([[0.95105652]]), array([[0.80901699]]), array([[0.58778525]]), array([[0.30901699]]), array([[-2.77555756e-14]]), array([[-0.30901699]]), array([[-0.58778525]]), array([[-0.80901699]]), array([[-0.95105652]]), array([[0.95105652]]), array([[0.9045085]]), array([[0.76942088]]), array([[0.55901699]]), array([[0.29389263]]), array([[1.70086167e-13]]), array([[-0.29389263]])

本质上,每个元素都是一个单独的numpy数组。它的维度是

np.shape(ls)
(100, 1, 1)

我不太明白第三个维度是怎么来的,但我想从这个列表中提取所有100个值,并把它放在一个numpy维度数组中。(100,)

我如何才能做到这一点?

python numpy numpy-ndarray
1个回答
0
投票

你可以直接建立一个理解并将其转换为numpy数组。

result = np.array([i[0][0] for i in ls])

下面是你的例子的一些timeit结果。

>>> timeit.timeit("""np.ravel(ls)""", globals = globals(),number=100000)
1.2485979999983101
>>> timeit.timeit("""np.transpose(ls)[0][0]""", globals = globals(),number=100000)
1.4232207000022754
>>> timeit.timeit("""np.array([i[0][0] for i in ls])""", globals = globals(),number=100000)
0.7894333000003826

对于一个大小为100的列表,它变成:

>>> timeit.timeit("""np.ravel(ls)""", globals = globals(),number=100000)
5.593053000000509
>>> timeit.timeit("""np.transpose(ls)[0][0]""", globals = globals(),number=100000)
6.153891400001157
>>> timeit.timeit("""np.array([i[0][0] for i in ls])""", globals = globals(),number=100000)
4.391332800001692
© www.soinside.com 2019 - 2024. All rights reserved.