Есть ли эффективный способ конвертировать numpy.ndarray в список?

У меня есть массив Y формы (это просто пример, у меня огромные данные в этой форме). Массив формируется с использованием numpy vstack и hstack (т.е. я не хочу менять способ получения этого массива, поскольку я получил его с помощью некоторых сложных операций):

 Y=array([[1,  1,2],
        [1,  2,0],
        [-1, 3,1],
        [-1, 2,2]])
y=[1,1,-1,-1]
Y1=list(Y)

Теперь я ввожу данные в функцию libsvm, эта библиотека ожидает, что входные параметры будут в форме словаря, списка или кортежа. Следовательно, код для того же:

prob=svm_problem(y, Y1)

Приведенная выше функция выдает ошибку, что «xi должен быть словарем, списком или кортежем». Другой способ, который я знаю, - это преобразовать Y в список итеративно. Способ сделать это:

Y1=[] 
for i in range(0, Y.shape[0]):
      Y1.append(list(Y[i])

Вышеупомянутый метод работает хорошо, но медленно, учитывая огромные данные, которые у меня есть. Есть ли более быстрый способ сделать то же самое?


person Jannat Arora    schedule 26.03.2012    source источник


Ответы (1)


>>> Y.tolist()
[[1, 1, 2], [1, 2, 0], [-1, 3, 1], [-1, 2, 2]]

Я не уверен, что это будет намного быстрее, чем то, что у вас есть для больших двумерных массивов. Преобразование таких массивов в простые списки списков по своей сути является неэффективной операцией, поэтому вы в первую очередь используете NumPy.

person Sven Marnach    schedule 26.03.2012