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

如何将NumPy数组转换为Python列表(例如[[1,2,3],[4,5,6]] ),并合理快速地执行?

使用tolist()

 import numpy as np >>> np.array([[1,2,3],[4,5,6]]).tolist() [[1, 2, 3], [4, 5, 6]] 

请注意,这会将值从它们可能具有的任何numpytypes(例如np.int32或np.float32)转换为“最接近的兼容Pythontypes”(在列表中)。 如果你想保留numpy数据types,你可以调用你的数组上的list(),最后你会得到一个numpy标量的列表。 (感谢Mr_and_Mrs_D在评论中指出了这一点。)

NumPy数组有一个tolist方法 :

 In [1]: arr=np.array([[1,2,3],[4,5,6]]) In [2]: arr.tolist() Out[2]: [[1, 2, 3], [4, 5, 6]] 

numpy .tolist方法在numpy数组形状为2D时生成嵌套数组。

如果需要扁平列表,下面的方法工作。

 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` 

如果你有一个名为narray的numpy ndarray

 narray[0] = [[[ 87 137]] [[ 87 138]] [[ 86 139]][[ 85 140]][[ 85 141]]] narray[1] = [[[ 84 142]] [[ 84 143]] [[ 83 144]]] narray[2] = [[[ 82 145]] [[ 81 146]] [[ 80 147]] [[ 79 148]] [[ 78 149]] [[ 77 150]][[ 77 151]]] 

你可以在一个循环内循环,就像分别为每个元素添加额外的元素

 for i in range(len(narray)): i_narray = narray[i] for j in range(len(i_narray)): print(i_narray[j],"\n") 

这是输出

 [[ 87 137]] [[ 87 138]] [[ 86 139]] [[ 85 140]] [[ 85 141]] [[ 84 142]] [[ 84 143]] [[ 83 144]] [[ 82 145]] [[ 81 146]] [[ 80 147]] [[ 79 148]] [[ 78 149]] [[ 77 150]] [[ 77 151]] 

希望它可以帮助别人:)