将numpy.ndarray隐藏到列表中

2024-09-27 07:33:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将此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]访问它的元素,等等

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

最后,在我将其转换为列表后,我尝试将列表成员乘以1.05,得到这个错误

TypeError: can't multiply sequence by non-int of type 'float'


Tags: 函数numpy元素列表by错误成员cover
3条回答

从二维阵列开始,形状(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

如果首先将数组转换为一维数组,则列表索引更简单:

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()选项是很好的选择。在列表上迭代通常比在数组上迭代快。对于数组,您应该尝试使用快速的全数组方法

是的,它是一个列表,您可以检查变量的类型:

type(a)

要将每个元素与1.05相乘,请运行以下代码:

x = [float(i[0]) * 1.05 for i in a]
print(x)

您已转换为列表的列表,因此无法广播

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])

相关问题 更多 >

    热门问题