[英]Covert numpy.ndarray to a list
我正在尝试将此 numpy.ndarray 转换为列表
[[105.53518731]
[106.45317529]
[107.37373843]
[108.00632646]
[108.56373502]
[109.28813113]
[109.75593207]
[110.57458371]
[111.47960639]]
我正在使用这个 function 来转换它。
conver = conver.tolist()
output 是这个,我不确定它是否是一个列表,如果是这样,我可以通过覆盖 [0] 等来访问它的元素
[[105.5351873125], [106.45317529411764], [107.37373843478261], [108.00632645652173], [108.56373502040816], [109.28813113157895], [109.75593206666666], [110.57458370833334], [111.47960639393939]]
最后,在将其转换为列表后,我尝试将列表成员乘以 1.05 并得到此错误!
TypeError:不能将序列乘以“float”类型的非整数
您从一个形状为 (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()
选项很高兴知道。 迭代列表通常比迭代数组更快。 对于数组,您应该尝试使用快速的整体数组方法。
您转换为列表列表,因此您无法广播。
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])
是的,它是一个列表,您可以检查变量的类型:
type(a)
将每个元素乘以1.05
,然后运行以下代码:
x = [float(i[0]) * 1.05 for i in a]
print(x)
尝试这个:
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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.