看来我有 NumPy 数组列表格式的数据(type() = np.ndarray
):
[array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]),
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]),
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]),
array([[ 0.00353654]]), array([[ 0.00353654]]), array([[ 0.00353654]]),
array([[ 0.00353654]])]
我正在尝试将它放入一个 polyfit 函数中:
m1 = np.polyfit(x, y, deg=2)
但是,它返回错误:TypeError: expected 1D vector for x
我认为我需要将我的数据扁平化为:
[0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654 ...]
我尝试了一个通常适用于列表列表的列表理解,但正如预期的那样,这没有奏效:
[val for sublist in risks for val in sublist]
最好的方法是什么?
最佳答案
您可以使用 numpy.concatenate
,顾名思义,基本上将这样一个输入列表的所有元素连接到一个 NumPy 数组中,就像这样 -
import numpy as np
out = np.concatenate(input_list).ravel()
如果你希望最终输出是一个列表,你可以像这样扩展解决方案 -
out = np.concatenate(input_list).ravel().tolist()
示例运行 -
In [24]: input_list
Out[24]:
[array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]]),
array([[ 0.00353654]])]
In [25]: np.concatenate(input_list).ravel()
Out[25]:
array([ 0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654,
0.00353654, 0.00353654, 0.00353654, 0.00353654, 0.00353654,
0.00353654, 0.00353654, 0.00353654])
转换为列表-
In [26]: np.concatenate(input_list).ravel().tolist()
Out[26]:
[0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654,
0.00353654]
关于python - 展平 NumPy 数组列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33711985/