【问题标题】:Using python and numpy, how to convert 1d list to a list of np.array?使用 python 和 numpy,如何将 1d 列表转换为 np.array 列表?
【发布时间】:2017-03-28 15:37:05
【问题描述】:

这是输入:

input_list=[a,b,c,d]

我希望得到输出

output_list=[np.array([a]),np.array([b]),np.array([c]),np.array([d])]

我知道每个元素上的循环也应该起作用,但我想知道是否有快速的方法来完成这个?提前致谢。


这是我的三种方法的代码,速度没有太大差异,但第 2 和第 3 更整洁。 :

第一种方法:t.append(np.array([i])),cost_time=14.1404731274 seconds

import time
start_time = time.time()
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows():
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map']))
    t=[]
    for i in input_value:
        t.append(np.array([i])) 
print("--- %s seconds ---" % (time.time() - start_time))

第二种方法:t=[np.array([x]) for x in input_value],cost_time=13.7779290676 seconds

import time
start_time = time.time()
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows():
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map']))
    t=[np.array([x]) for x in input_value]
print("--- %s seconds ---" % (time.time() - start_time))

第三种方法:t=np.array(input_value)[:, None],cost_time=13.2799420357 seconds

import time
start_time = time.time()
for index, row in modified_test_store_raw_df[modified_test_store_raw_df.Open==1].iterrows():
    input_value=(list(modified_test_store_raw_df.loc[index,'tuple_map']))
    t=np.array(input_value)[:, None]
print("--- %s seconds ---" % (time.time() - start_time))

【问题讨论】:

  • 每个人都在建议一个列表推导,这当然是一个列表循环。基本上就是这样。只要您的目标是一个快速的列表。 numpy 函数将产生某种数组。

标签: python arrays python-2.7 numpy


【解决方案1】:

您可以使用列表推导:

import numpy as np
[np.array([x]) for x in input_list]

但也许你需要这个:

np.array(input_list)[:, None]       

【讨论】:

  • 我不确定您的第二种方法。它将所有内容放在一个数组中,而 OP 希望列表中的每个元素都有不同的数组。
  • 如果元素是不同大小的列表,第二个将生成列表的对象数组,而不是数组的列表。如果它们都是相同大小的一维列表,则结果将是一个二维数组。只有当它们是标量时,None 才会有帮助。
  • @kmario23 是的。第二个选项只是对 OP 可能想要什么的猜测。
  • @hpaulj 这就是我的假设。如果一维列表是标量列表,则更合适。
  • np.array(input_list)[:, None] 是最简洁的方法。
【解决方案2】:

使用列表推导式怎么样?

output_list = [ np.array([item]) for item in input_list]

或者更好的生成器理解:

output_gen = (np.array([item]) for item in input_list)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    • 2019-02-03
    • 2017-01-29
    • 1970-01-01
    • 2019-03-12
    • 1970-01-01
    • 2020-03-03
    相关资源
    最近更新 更多