ValueError: установка элемента массива с последовательностью в массиве numpy - PullRequest
1 голос
/ 06 мая 2020

Это простой пример большого массива

   x = [[[1,2,3], "abs"], [[1,2,3], "abs"]]
   y = np.array(x)
   z = y[:, 0]
   z.astype('int') # This will throw an error

Выход

z >> Out [9]: array ([list ( [1, 2, 3]), list ([1, 2, 3])], dtype = object)

есть ли способ преобразовать это из объекта в int, не выполняя итерацию по список x

1 Ответ

0 голосов
/ 06 мая 2020

Я искал вашу проблему и обнаружил: Использование 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]])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...