Извлечь отдельные значения из массива numpy в список - PullRequest
1 голос
/ 31 марта 2020

Я пытаюсь извлечь значения из массива numpy и поместить отдельные записи в список.

Например, если у меня есть следующий список:

import numpy as np
x = 1
problem_variable = np.array(['a', 'b'], dtype='<U9')
z = 2
mylist = [x, problem_variable , z]
# [1, array(['a', 'b'], dtype='<U9'), 2]

Как мне получить результат

[1, 'a', 'b', 2]

Я не знаю длину problem_variable перед рукой, поэтому не может жесткий код problem_variable[0], problem_variable[1] et c.

Следующее делает то, что я хочу, но я уверен, что мне не хватает подходящего способа разбить массив на части. Спасибо.

result = []
result.append(x)
for i in problem_variable: result.append(i)
result.append(z)

Ответы [ 3 ]

4 голосов
/ 31 марта 2020

вы можете распаковать ваш массив:

mylist = [x, *problem_variable , z]
1 голос
/ 31 марта 2020

Вы можете использовать np.hstack , который может последовательно упорядочивать массивы,

np.hstack((x, problem_variable , z))

# ['1' 'a' 'b' '2']
1 голос
/ 31 марта 2020

Поскольку вы используете numpy: вы можете использовать np.r_ для объединения входных объектов по первой оси:

np.r_[x, problem_variable, z]
# array(['1', 'a', 'b', '2'], dtype='<U9')

Сравнение производительности в больших списках :

problem_var = np.concatenate([problem_variable]*10000, axis=0)

%timeit np.r_[x, problem_var, z]
# 143 µs ± 19.6 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)

%timeit np.hstack((x, problem_var , z))
# 553 µs ± 55.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit [x, *problem_var.tolist() , z]
# 502 µs ± 42.6 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)

%timeit [x, *problem_var , z]
# 6.46 ms ± 215 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...