我有一个以 NumPy 数组为元素的列表,如下所示:
[array([ 0.2, -2.3, 5.3]),
array([-1.6, -1.7, 0.3]),
array([ 2.4, -0.2, -3.0]),
array([-4.1, -2.3, -2.7])]
我想将其转换为 3 个列表,每个列表包含来自上述列表列的元素。因此,期望的结果如下
list1 = [0.2, -1.6, 2.4, -4.1]
list2 = [-2.3, -1.7, -0.2, -2.3]
list3 = [5.3, 0.3, -3.0, -2.7]
1
6 个回答
6
您可以使用如下方法实现此目的:
transposed = np.array(array_list).T
list1, list2, list3 = transposed.tolist()
1
-
1我擅自修改了该链接(链接到
T
而不是transpose
,因为T
在代码片段中使用了 )。
–
|
您可以使用 zip
a = [
np.array([0.2, -2.3, 5.3]),
np.array([-1.6, -1.7, 0.3]),
np.array([2.4, -0.2, -3.0]),
np.array([-4.1, -2.3, -2.7])
]
使用以下一行中的列表 comp zip
:
list1,list2,list3 = [list(x) for x in zip(*a)]
2
-
2可以简化为
list1,list2,list3 = zip(*a)
。右侧解包遍历zip
。除非OP真的需要列表而不是元组。
– -
@hpaulj 是的,绝对如此。Op 将获得 3 个元组。
–
|
你可以尝试
import numpy as np
a = [
np.array([0.2, -2.3, 5.3]),
np.array([-1.6, -1.7, 0.3]),
np.array([2.4, -0.2, -3.0]),
np.array([-4.1, -2.3, -2.7])
]
list1 = [arr[0] for arr in a]
list2 = [arr[1] for arr in a]
list3 = [arr[2] for arr in a]
# your result
print("list1:", list1)
print("list2:", list2)
print("list3:", list3)
|
假设您的数组列表定义如下:
import numpy as np
array_list = [np.array([ 0.2, -2.3, 5.3]),
np.array([-1.6, -1.7, 0.3]),
np.array([ 2.4, -0.2, -3.0]),
np.array([-4.1, -2.3, -2.7])]
然后您可以使用以下一行代码:
list1, list2, list3 = np.transpose(array_list).tolist()
NumPy 的函数会隐式转换array_list
为二维 NumPy 数组(因此无需显式执行此操作),然后再进行转置(即将行转换为列,将列转换为行)。调用结果数组会将其转换为列表的列表,最顶层有三个元素(对应于原始的三列)。将结果赋值给list1, list2, list3 = ...
会将这个三元素列表“解包”到三个目标变量中。
如果您希望结果(list1
,,list2
)list3
再次为 NumPy 数组而不是列表,则可以省略tolist()
,因此只需编写:
list1, list2, list3 = np.transpose(array_list)
|
您可以将列表堆叠到二维 numpy 数组中并进行转置。
import numpy as np
array_list = [np.array([0.2, -2.3, 5.3]),
np.array([-1.6, -1.7, 0.3]),
np.array([2.4, -0.2, -3.0]),
np.array([-4.1, -2.3, -2.7])]
stacked_array = np.vstack(array_list).T
list1, list2, list3 = stacked_array[0].tolist(), stacked_array[1].tolist(), stacked_array[2].tolist()
print(list1) print(list2) print(list3)
|
将整个列表转换为 Python 2D 列表列表比实例化三个新变量更合适,无论如何你都可以这样做
original_list = [np.array([ 0.2, -2.3, 5.3]),
np.array([-1.6, -1.7, 0.3]),
np.array([ 2.4, -0.2, -3.0]),
np.array([-4.1, -2.3, -2.7])]
list1 = [float(x[0]) for x in original_list]
list2 = [float(x[1]) for x in original_list]
list3 = [float(x[2]) for x in original_list]
或者,您可以将原始列表列表转换为 numpy 数组,然后转置并将其转换回列表。
result = np.array(original_list).transpose().tolist()
list1 = result[0]
list2 = result[1]
list3 = result[2]
|
np.float
吗?在 numpy2 中,它们的显示不同。答案使用tolist()
将更彻底地转换为 python 浮点数。–
|