将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]]
希望它可以帮助别人:)