Скрыть numpy .ndarray в список - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь преобразовать этот numpy .ndarray в список

[[105.53518731]
 [106.45317529]
 [107.37373843]
 [108.00632646]
 [108.56373502]
 [109.28813113]
 [109.75593207]
 [110.57458371]
 [111.47960639]]

Я использую эту функцию для его преобразования.

conver = conver.tolist()

результат такой , Я не уверен, является ли это список, и если да, могу ли я получить доступ к его элементам, выполнив cover [0], et c

[[105.5351873125], [106.45317529411764], [107.37373843478261], [108.00632645652173], [108.56373502040816], [109.28813113157895], [109.75593206666666], [110.57458370833334], [111.47960639393939]]

, наконец, после того, как я преобразовал его в список, я попробуйте умножить элементы списка на 1,05 и получите эту ошибку!

TypeError: невозможно умножить последовательность на не-int типа 'float'

Ответы [ 4 ]

3 голосов
/ 09 мая 2020

Вы начинаете с 2d-массива с shape (n, 1), например:

In [342]: arr = np.random.rand(5,1)*100                                                                
In [343]: arr                                                                                          
Out[343]: 
array([[95.39049043],
       [19.09502087],
       [85.45215423],
       [94.77657561],
       [32.7869103 ]])

tolist создает список, но он содержит списки; каждый [] слой обозначает список. Обратите внимание, что вложенность [] соответствует массиву:

In [344]: arr.tolist()                                                                                 
Out[344]: 
[[95.39049043424225],
 [19.095020872584335],
 [85.4521542296349],
 [94.77657561477125],
 [32.786910295446425]]

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

In [345]: arr.tolist()[0]                                                                              
Out[345]: [95.39049043424225]
In [346]: arr.tolist()[0][0]                                                                           
Out[346]: 95.39049043424225
In [347]: arr.tolist()[0][0]*1.05                                                                      
Out[347]: 100.16001495595437

Если вы сначала превратите массив в 1d one, индексация списка проще:

In [348]: arr.ravel()                                                                                  
Out[348]: array([95.39049043, 19.09502087, 85.45215423, 94.77657561, 32.7869103 ])
In [349]: arr.ravel().tolist()                                                                         
Out[349]: 
[95.39049043424225,
 19.095020872584335,
 85.4521542296349,
 94.77657561477125,
 32.786910295446425]
In [350]: arr.ravel().tolist()[0]                                                                      
Out[350]: 95.39049043424225

Но если ваша основная цель состоит в умножении элементов, сделать с массивом проще:

In [351]: arr * 1.05                                                                                   
Out[351]: 
array([[100.16001496],
       [ 20.04977192],
       [ 89.72476194],
       [ 99.5154044 ],
       [ 34.42625581]])

Вы можете получить доступ к элементам массив с:

In [352]: arr[0,0]                                                                                     
Out[352]: 95.39049043424225

Но если вам действительно нужно выполнить итерацию, полезно знать вариант tolist(). Итерация по спискам обычно выполняется быстрее, чем по массиву. С массивом вы должны попробовать использовать быстрые методы всего массива.

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

Попробуйте следующее:

import numpy as np

a = [[105.53518731],
 [106.45317529],
 [107.37373843],
 [108.00632646],
 [108.56373502],
 [109.28813113],
 [109.75593207],
 [110.57458371],
 [111.47960639]]

b = [elem[0] for elem in a]
b = np.array(b)

print(b*1.05)
0 голосов
/ 09 мая 2020

да, это список, вы можете проверить тип переменной:

type(a)

, чтобы умножить каждый элемент на 1.05, затем запустите приведенный ниже код:

x = [float(i[0]) * 1.05 for i in a]
print(x)
0 голосов
/ 09 мая 2020

вы конвертируете в список списка, поэтому вы не можете транслировать.

import numpy as np
x = [[105.53518731],
 [106.45317529],
 [107.37373843],
 [108.00632646],
 [108.56373502],
 [109.28813113],
 [109.75593207],
 [110.57458371],
 [111.47960639],]
x = np.hstack(x)
x * 1.05

array([110.81194668, 111.77583405, 112.74242535, 113.40664278,
       113.99192177, 114.75253769, 115.24372867, 116.1033129 ,
       117.05358671])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...