【问题标题】:How do I easily convert a numpy.ndarray to a list of numpy.array?如何轻松地将 numpy.ndarray 转换为 numpy.array 列表?
【发布时间】:2016-11-13 17:39:55
【问题描述】:

我目前正在努力将一些数据解析为训练框架。

问题是框架无法处理 ndarray。我需要转换成数组列表。输入和输出数据当前存储为两个单独的 numpy.ndarray 列表。

  1. 必须将输入数据转换为 numpy 数组列表,其中每个数组包含 ndarray 的一列。

  2. 必须将输出数据转换为 numpy 数组列表,其中每个数组包含 ndarray 的行?..

可以转换成这个吗?

当我打印 train_output_data[0] 我得到这个:

https://ufile.io/fa816

【问题讨论】:

  • 如您之前的@​​987654322@ 中所列,使用list(a)list(a.T)?
  • 我不确定我是否理解转置在这里有什么帮助?
  • Transpose 将第二个轴作为第一个轴,因此当 put 进入list() 时,将创建一个 cols 列表。为什么不试试呢?如果不解决,放一个样本数组和预期的数组列表怎么样?
  • @Divakar 感谢您的解释!如果我在两者上都这样做,我认为这对问题没有好处,我想只有一个必须这样做..但是哪一个。列出的 numpy.array 是逐行存储还是逐列存储?
  • @CarltonBanks 你不能试试吗?例如。 a = np.array([[1, 2, 3], [4, 5, 6]]); list1 = list(a); list2 = list(a.T) 然后看看哪个是你想要的。您可以在交互式 python 会话中执行此操作,甚至更好的是 ipython 会话。

标签: python arrays python-2.7 numpy


【解决方案1】:

假设ipop分别是输入列表和输出列表,

newInput = [ip[:,i] for i in range(ip.shape[0])]
newOutput = [x for x in op]

如果 train_output_datatrain_input_data 是 2D numpy.ndarray 的列表,那么替代可以是

newInput = []
for ip in train_input_data:
    newInput.append([ip[:,i] for i in range(ip.shape[0])])

newOutput = []
for op in train_output_data:
    newOutput.append([x for x in op])

【讨论】:

  • 我猜你必须添加一个外部 for 循环才能使其运行在具有多个 ndarray 的列表中。
  • @CarltonBanks:您说输入和输出数据当前存储为两个单独的 numpy.ndarray 列表。 如果只有两个列表,每个输入一个并输出,那么上面两行就足够了。
  • 哦...是的,但无法调用 ip.shape[0]。因为 ndarrays 被附加到一个列表中。您可以调用 ip.shape[0].shape[0].. 但这仅适用于那个实例?
  • @CarltonBanks 我需要知道您输入的维度和数据类型规范。通过 ndarrays 列表,您是指 2D 数组列表还是 1D 数组列表?你能举一个输入输出的例子吗?
  • 我添加了一个通过打印 train_output_data[0] 得到的示例输出
猜你喜欢
  • 2013-02-09
  • 1970-01-01
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 2015-05-23
  • 2019-06-26
  • 1970-01-01
  • 2018-06-13
相关资源
最近更新 更多