Преобразовать список, содержащий несколько массивов numpy, в один массив numpy - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть список, который выглядит так (это подмножество):

[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,)

Как я могу это сделать?

1 Ответ

0 голосов
/ 27 апреля 2020

Вы можете просто построить понимание и преобразовать его в массив numpy:

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

Вот некоторые результаты, приведенные в вашем примере:

>>> 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
...