Python 如何将嵌套列表(3D)转换为数组
我在列表中有一个嵌套列表,我想将其转换为numpy数组。有什么办法让它工作吗?如何“遵守”这些维度或什么?这些是特定尺寸(5249、40、94)的形状,下面是一些代码:Python 如何将嵌套列表(3D)转换为数组,python,arrays,list,numpy,Python,Arrays,List,Numpy,我在列表中有一个嵌套列表,我想将其转换为numpy数组。有什么办法让它工作吗?如何“遵守”这些维度或什么?这些是特定尺寸(5249、40、94)的形状,下面是一些代码: print(list[0]) print("") print("############################################################################################################") pr
print(list[0])
print("")
print("############################################################################################################")
print("")
print(list[0][0])
print("")
print("############################################################################################################")
print("")
print(list[0][0][0])
输出:
[[-6.61763245e+02 -6.64446411e+02 -6.69300354e+02 ... -5.77811462e+02
-6.03125916e+02 -6.44908325e+02]
[ 5.16810684e+01 4.93927383e+01 4.33423386e+01 ... 1.15522194e+02
1.02576866e+02 7.31012421e+01]
[ 2.85251961e+01 2.91995888e+01 2.44578667e+01 ... 2.78144531e+01
3.44897461e+01 4.35078812e+01]
...
[-4.82816219e-01 2.96157646e+00 4.19265079e+00 ... -5.56250429e+00
-2.69588089e+00 9.44380760e-02]
[ 2.64353752e-01 4.48119164e+00 6.22685146e+00 ... -5.64488232e-01
-9.20243263e-02 2.12504435e+00]
[ 3.63748550e-01 4.75209856e+00 7.24038124e+00 ... 7.15274096e+00
7.77531719e+00 5.09825420e+00]]
############################################################################################################
[-661.76324 -664.4464 -669.30035 -679.77814 -690.35443 -660.9415
-559.9239 -485.485 -438.78836 -415.3624 -390.37952 -373.00934
-362.99307 -373.43564 -398.9366 -370.4043 -316.54483 -302.01596
-297.92493 -276.72098 -247.64464 -265.17184 -323.19016 -389.68723
-405.23648 -405.97824 -401.15686 -393.97366 -389.72104 -393.87613
-421.2706 -453.30283 -476.209 -510.27377 -484.22525 -449.0411
-436.07883 -417.73248 -406.98907 -427.94107 -463.365 -505.69937
-551.2041 -583.83923 -593.5474 -574.877 -544.497 -496.86914
-455.1289 -441.72507 -426.9304 -424.22696 -431.49948 -427.11542
-426.9054 -421.04877 -410.71277 -420.71997 -432.1894 -438.21225
-488.68088 -560.41223 -603.5054 -563.4358 -519.3162 -518.875
-546.30237 -547.3298 -549.09814 -543.82275 -512.5244 -439.3493
-380.52084 -343.0858 -314.34274 -307.8192 -345.0038 -380.26834
-358.30072 -338.74014 -324.08173 -323.67844 -338.8997 -376.0949
-407.73825 -472.8915 -571.7233 -632.6836 -669.91046 -646.43445
-607.1672 -577.81146 -603.1259 -644.9083 ]
############################################################################################################
-661.76324
当我尝试将其转换为数组时,出现以下错误:
>>> list_x = np.asarray(list)
ValueError: could not broadcast input array from shape (40,94) into shape (40)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-44-eaaeafee7c41> in <module>
----> 1 list_x = np.asarray(list)
/opt/conda/lib/python3.7/site-packages/numpy/core/_asarray.py in asarray(a, dtype, order)
83
84 """
---> 85 return array(a, dtype, copy=False, order=order)
86
87
ValueError: could not broadcast input array from shape (40,94) into shape (40)
列表x=np.asarray(列表)
ValueError:无法将输入数组从形状(40,94)广播到形状(40)
---------------------------------------------------------------------------
ValueError回溯(最近一次调用上次)
在里面
---->1列表x=np.asarray(列表)
/asarray中的opt/conda/lib/python3.7/site-packages/numpy/core//\u asarray.py(a,数据类型,顺序)
83
84 """
--->85返回数组(a,数据类型,副本=False,顺序=order)
86
87
ValueError:无法将输入数组从形状(40,94)广播到形状(40)
如果所有子列表的长度相同,则您的过程将正常工作。如注释中所述,很可能有一个或多个子列表的长度不一致 请参阅下面的代码以确认其是否按预期工作。前4行从np.array(
start
)创建起始列表(l1
)。最后3行从列表创建数组,然后打印新的数组形状和内容
a0, a1, a2 = 4, 3, 2
start = np.arange(a0*a1*a2).reshape(a0,a1,a2)
print(start)
l1 = start.tolist()
end = np.array(l1)
print('\n end shape=',end.shape,'\n')
print(end)
下面是一种在尝试创建数组之前测试列表的方法。下面的代码继续上面的示例。它向两个子列表添加一项,然后循环计数并将计数保存在数组arr\u cnt
中。最后一步测试arr\u cnt
中的所有值是否相同(或不相同)。对于本例,它将打印False
l1[0][0].append(3)
l1[-1][-1].append(5)
print(l1)
arr_cnt=np.empty( (len(l1),len(l1[0])), dtype=int)
for i,l2 in enumerate(l1):
for j,l3 in enumerate(l2):
arr_cnt[i,j] = len(l3)
# test arr_cnt values; True when all values are identical
print( (arr_cnt[0] == arr_cnt).all() )
子列表的形状不一致。