在python中将1x1维数组列表转换为浮点列表
我有一份表格清单:在python中将1x1维数组列表转换为浮点列表,python,arrays,list,pandas,Python,Arrays,List,Pandas,我有一份表格清单: [array([ 3755.16235032]), array([ 3755.16235032]), array([ 3755.16235032]), array([ 3755.16235032])] 我想要一份表格清单: [3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032] 第一个列表中的每个元素都是sci工具包学习回归器的结果。我想要第二种格式,这样我就可以绘制分类器的预测 使用np.连接
[array([ 3755.16235032]),
array([ 3755.16235032]),
array([ 3755.16235032]),
array([ 3755.16235032])]
我想要一份表格清单:
[3755.16235032,
3755.16235032,
3755.16235032,
3755.16235032]
第一个列表中的每个元素都是sci工具包学习回归器的结果。我想要第二种格式,这样我就可以绘制分类器的预测 使用
np.连接以避免手动迭代:
my_list = [np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032])]
new_list = np.concatenate(my_list).tolist()
>>> new_list
[3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
基准:
根据评论中的广泛讨论,以下是我的基准:
my_list = [np.random.randn(1) for _ in range(100000)]
def concat_method(my_list=my_list):
return np.concatenate(my_list).tolist()
def hstack_method(my_list=my_list):
return np.hstack(my_list).tolist()
def flatten_method(my_list=my_list):
return np.array(my_list).flatten().tolist()
def ravel_method(my_list=my_list):
return np.array(my_list).ravel().tolist()
import timeit
>>> timeit.timeit(concat_method, number=100) / 100
0.025655772869977226
>>> timeit.timeit(hstack_method, number=100) / 100
0.1172302443100125
>>> timeit.timeit(ravel_method, number=100) / 100
0.041237239889997
>>> timeit.timeit(flatten_method, number=100) / 100
0.0412076849100049
使用np.连接以避免手动迭代:
my_list = [np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032]),
np.array([ 3755.16235032])]
new_list = np.concatenate(my_list).tolist()
>>> new_list
[3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
基准:
根据评论中的广泛讨论,以下是我的基准:
my_list = [np.random.randn(1) for _ in range(100000)]
def concat_method(my_list=my_list):
return np.concatenate(my_list).tolist()
def hstack_method(my_list=my_list):
return np.hstack(my_list).tolist()
def flatten_method(my_list=my_list):
return np.array(my_list).flatten().tolist()
def ravel_method(my_list=my_list):
return np.array(my_list).ravel().tolist()
import timeit
>>> timeit.timeit(concat_method, number=100) / 100
0.025655772869977226
>>> timeit.timeit(hstack_method, number=100) / 100
0.1172302443100125
>>> timeit.timeit(ravel_method, number=100) / 100
0.041237239889997
>>> timeit.timeit(flatten_method, number=100) / 100
0.0412076849100049
只是另一种解决方案:给定x
是您的输入列表
,您可以使用NumPy中的ravel()
作为
xlst = list(np.array(x).ravel())
print (xlst)
或者您可以使用flatte()
作为
xlst = list(np.array(x).flatten())
print (xlst)
如果您只想将最终答案作为数组,则不需要将列表
放在=
之后。并且,如果您的输入x
已经是numpy数组类型,请将np.array(x.ravel()
替换为x.ravel()
或者,正如上面的回答中已经提到的,您也可以使用np.array(x).flatten().tolist()
和np.array(x).ravel().tolist()来代替使用
本页列出的所有可能答案的时间分析灵感来自以下答案之一中的评论(感谢评论员)(由于格式问题,很容易将其放在这里而不是评论中):
输出
10 loops, best of 3: 55.2 ms per loop
10 loops, best of 3: 155 ms per loop
100 loops, best of 3: 2.45 ms per loop
100 loops, best of 3: 2.29 ms per loop
只是另一种解决方案:给定x
是您的输入列表
,您可以使用NumPy中的ravel()
作为
xlst = list(np.array(x).ravel())
print (xlst)
或者您可以使用flatte()
作为
xlst = list(np.array(x).flatten())
print (xlst)
如果您只想将最终答案作为数组,则不需要将列表
放在=
之后。并且,如果您的输入x
已经是numpy数组类型,请将np.array(x.ravel()
替换为x.ravel()
或者,正如上面的回答中已经提到的,您也可以使用np.array(x).flatten().tolist()
和np.array(x).ravel().tolist()来代替使用
本页列出的所有可能答案的时间分析灵感来自以下答案之一中的评论(感谢评论员)(由于格式问题,很容易将其放在这里而不是评论中):
输出
10 loops, best of 3: 55.2 ms per loop
10 loops, best of 3: 155 ms per loop
100 loops, best of 3: 2.45 ms per loop
100 loops, best of 3: 2.29 ms per loop
使用hstack
np.hstack(my_list).tolist()
Out[180]: [3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
使用hstack
np.hstack(my_list).tolist()
Out[180]: [3755.16235032, 3755.16235032, 3755.16235032, 3755.16235032]
[x[0]表示数组中的x]
?是否确实不希望它作为1D浮点数组而不是浮点列表?例如,你可以做np.array(lst).flatte()
或np.concatenate(lst)
来得到一个平面数组。(如果你真的想要一个列表,你也可以做list(np.array(lst).flatte())
,它可能比listcomp稍快一些……但是对于N=4,谁在乎呢?[x[0]对于数组中的x]
?您确定不希望它作为一个1D浮点数数组而不是浮点数列表吗?例如,你可以做np.array(lst).flatte()
或np.concatenate(lst)
来得到一个平面数组。(如果你真的想要一个列表,你也可以做list(np.array(lst).flatte())
,它可能比listcomp稍快一些……但是对于N=4,谁在乎呢?),不是一个浮点数数组。我不知道为什么他想要这个,但是…不确定它是否比N=4的listcomp更好,但是,如果OP要使用numpy,至少它值得OP学习如何这样做。我实际上不知道。如果重要的话,我会%timeit
。但如果这不重要,也可能不重要,串联
可能更容易理解。(在我对这个问题的评论中,我把flatte
放在concatenate
之前的唯一原因是,这是我第一次想到的,而不是我认为它会更好……)你是对的,这可能并不重要。。。但我的好奇心征服了我(我知道你内心深处也渴望知道……)。在100000个阵列的列表中,plant
需要约0.041秒,concat需要约0.026秒。这包括在这两种情况下都使用tolist()
转换为列表。现在你必须尝试从温家宝的回答中选择hstack
,然后会有人来建议使用普通的堆栈
,以及重塑
。看看你自己陷入了什么样的境地。OP明确要求一个浮点列表,而不是一个浮点数组。我不知道为什么他想要这个,但是…不确定它是否比N=4的listcomp更好,但是,如果OP要使用numpy,至少它值得OP学习如何这样做。我实际上不知道。如果重要的话,我会%timeit
。但如果这不重要,也可能不重要,串联
可能更容易理解。(在我对这个问题的评论中,我把flatte
放在concatenate
之前的唯一原因是,这是我第一次想到的,而不是我认为它会更好……)你是对的,这可能并不重要。。。但我的好奇心征服了我(我知道你内心深处也渴望知道……)。在100000个阵列的列表中,plant
需要约0.041秒,concat需要约0.026秒。这包括在这两种情况下都使用tolist()
转换为列表。现在你必须尝试从温家宝的回答中选择hstack
,然后会有人来建议使用普通的堆栈
,以及重塑
。看看你自己陷入了什么。我认为我们时间安排的差异与以下事实有关:你的列表x
是一个np.array
的np.array
,而我使用的是一个np.array
s的列表。我也会在我的答案中加入我的基准。是我