Я искал вашу проблему и обнаружил: Использование Numpy Векторизация функций, возвращающих векторы .
Итак, я думаю, вы могли бы использовать векторизованный подход:
import numpy as np
x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
y = np.array(x)
z = y[:, 0]
def f(l):
return np.array(l)
v = np.vectorize(f, signature='()->(n)')
k = v(z)
, что дает k
как:
array([[1, 2, 3],
[1, 2, 3]])
@ hpaulj также предлагает более аккуратный метод с использованием np.vstack(z)
, который дает тот же ответ.
Согласно документации, аргумент vstack должен быть "последовательностью ndarrays", поэтому я не думаю, что передавать последовательность списков строго правильно, но я могу подтвердить, что это работает.
Наконец , если бы это был мой код, я бы просто придерживался простого понимания списка, это самый простой способ, и любое решение должно было бы выполнять некоторую форму for-l oop преобразования списков в ndarrays, так почему бы просто не выполнить итерацию в Python.
>>> np.array([r[0] for r in x])
array([[1, 2, 3],
[1, 2, 3]])