2015-06-03 2 views
2

Я довольно новичок в Python. Я посмотрел на другие подобные темы, но они не отвечают именно на то, что я хочу сделать. Вот результат:Преобразование многомерного массива numpy в список

coslist[1:4] 
Out[94]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0] 

Это то, что я хочу:

coslist=[0.7984719,0.33609957,0] 

Я попытался это:

tolist=list(coslist) 
tolist[1:3] 
Out[98]: [array([[ 0.7984719]]), array([[ 0.33609957]])] 

И это:

y=np.array(val).ravel().tolist() 
y[1:4] 
Out[99]: [array([[ 0.7984719]]), array([[ 0.33609957]]), 0] 

Как вы видите какой-либо из них то, что я хочу. Любая помощь будет оценена по достоинству.

+1

Ваш 'collist' - это список, заполненный двумерными массивами и числовыми значениями, с которыми довольно сложно работать. Вы уверены, что нет никакого способа построить этот список, где у вас есть только значение, хранящееся в 2D-массиве, а не 2D-массив? Если не возможно просто простой цикл python, в котором вы извлекаете значения, это путь. – Akavall

+0

Вы испортили свое создание этого списка. Правильное решение вашей проблемы будет не просто своего рода этапом последующей обработки; вам нужно исправить код, который его создает, или вы просто получите больше головных болей по линии. – user2357112

ответ

1

Существует встроенный метод numpy массива.

coslist = [numpy.array([[ 0.7984719]]), numpy.array([[ 0.33609957]]), 0] 
coslist = [x.tolist()[0][0] if type(x)==numpy.ndarray else x for x in coslist] 

type(coslst) # Should print <type 'list'> 
lst # Should print a list of lists 
+0

У меня ошибка, например, когда я запускаю ее. Это, вероятно, потому, что самый дорогостоящий не является ухабистым ndarray. Это список numpy ndarray. Я полностью застрял – Denis

+0

В этом случае отправьте небольшой пример, где вы поместите значения в coslist. Держите массив маленьким. – Aditya

+0

Это первые три элемента в списке: coslist [1: 4] Out [94]: [array ([[0.7984719]]), array ([[0.33609957]]), 0] – Denis

1

Прежде всего, необходимо, чтобы превратить ваш np.arrays в списке, постатейный:

coslist=[np.array(item).tolist() for item in coslist] 

Тогда я думаю, что единственный способ избавиться от списка внутри списка внутри списка с помощью итерации:

aux=[] 
for x in coslist: 
    if type(x)==list: 
     for k in range(len(x[0])): 
     aux.append(x[0][k]) 
    else: 
     aux.append(x) 
coslist=aux 

Обратите внимание, что я считал, что каждый массив numpy может иметь более одного значения внутри. Потому что, если ваш список содержит только np.arrays с одним значением каждого, вы можете просто сделать:

coslist=[np.array(item).tolist() for item in coslist] 
coslist=[x[0][0] if type(x)==list else x for x in coslist] 

или, если вы хотите быстрый ответ на вашу проблему конкретно, что будет делать:

coslist=[np.mean(coslist[k]) for k in range(len(coslist))] 
Смежные вопросы