Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将NumPy数组转换为Python列表结构?_Python_Numpy - Fatal编程技术网

将NumPy数组转换为Python列表结构?

将NumPy数组转换为Python列表结构?,python,numpy,Python,Numpy,如何将数组转换为Python列表(例如[[1,2,3],[4,5,6]]),并以相当快的速度进行转换?使用: 请注意,这会将值从可能具有的任何numpy类型(例如np.int32或np.float32)转换为“最接近的兼容Python类型”(在列表中)。如果要保留numpy数据类型,可以在数组上调用list(),最终得到一个数据类型列表。(感谢Mr_和Mrs_D在评论中指出了这一点。)如果numpy数组形状为2D,numpy.tolist方法将生成嵌套列表 如果需要平面列表,则以下方法有效 im

如何将数组转换为Python列表(例如
[[1,2,3],[4,5,6]]
),并以相当快的速度进行转换?

使用:


请注意,这会将值从可能具有的任何numpy类型(例如np.int32或np.float32)转换为“最接近的兼容Python类型”(在列表中)。如果要保留numpy数据类型,可以在数组上调用list(),最终得到一个数据类型列表。(感谢Mr_和Mrs_D在评论中指出了这一点。)

如果numpy数组形状为2D,numpy.tolist方法将生成嵌套列表

如果需要平面列表,则以下方法有效

import numpy as np
from itertools import chain

a = [1,2,3,4,5,6,7,8,9]
print type(a), len(a), a
npa = np.asarray(a)
print type(npa), npa.shape, "\n", npa
npa = npa.reshape((3, 3))
print type(npa), npa.shape, "\n", npa
a = list(chain.from_iterable(npa))
print type(a), len(a), a`
tolist()
即使遇到嵌套数组,例如pandas
DataFrame
,也可以正常工作

my_list = [0,1,2,3,4,5,4,3,2,1,0]
my_dt = pd.DataFrame(my_list)
new_list = [i[0] for i in my_dt.values.tolist()]

print(type(my_list),type(my_dt),type(new_list))
c=np.数组([[1,2,3],[4,5,6]]

另一种选择

c.ravel()
# or
c.ravel().tolist()

同样有效。

如果您的列表是float32
tolist
将其转换为
floats
s-这可能不是您想要的。使用
list(myarray)
不会出现这种情况-为什么我们更喜欢
tolist
?@Mr_and_Mrs_\D您是否建议,尽管数组中有浮点数,但您希望得到的列表是整数?这是一个完全不同的问题。。。当然,您必须指定,尽管是32个浮点值,但它们都是整数。无论如何,如果您遇到这种情况,我想执行
myarray.astype(np.int32).tolist()
将是一种选择,并明确说明您要完成的任务。(最后,
list(array\u of_type_float32)
在我尝试时没有给出整数…所以我不知道你在问什么。)我从来没有提到过整数-试试
float32\u array=np.array([0.51764709],np.float32);打印(float32_array.tolist());print(list(float32_array))
ok,因此一个转换为[float],另一个仍然使用numpy标量float32类型,如[np.float32]。好的很高兴知道,但我想这是否可取取决于每个具体情况。值得一提的是,我怀疑通常当有人(比如OP)要求转换为列表时,他们隐含的意思是常规Python数据类型的列表,在本例中是浮点数或整数,而不是numpy标量类型的列表。感谢您指出这一点:我已经编辑了答案,其中包含了一条关于这一点的注释。沿着这条思路:
np.array([[0',一',['2',3]])。tolist()->[[0',一',['2',3']
要获得一个平面列表,还有
a.flatte().tolist()
(或
list(a.flatte())
cf上面的讨论)
list(c.flatten())
c.ravel()
# or
c.ravel().tolist()