Вы начинаете с 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()
. Итерация по спискам обычно выполняется быстрее, чем по массиву. С массивом вы должны попробовать использовать быстрые методы всего массива.