【问题标题】:Best way to create large array in python?在 python 中创建大型数组的最佳方法?
【发布时间】:2019-09-05 21:15:13
【问题描述】:

我是 python 新手,正在尝试制作一个大型数组。寻找最好的方法来做到这一点。

基本上,我试图在 python 中创建一个大数组以放入另一个应用程序。该数组将具有可变数量的行和 5 列。我有存储在其他列表中的两列的数据,并希望遍历这些列表以填充我的数组中的这两列。

它看起来像:

x  y  z  l1 w1
x  y  z  l2 w2
x  y  z  l3 w3
x  y  z  l4 w4
x  y  z  l5 w5
x  y  z  l6 w6
x  y  z  l7 w7

我看过关于在 numpy 中使用列表或数组的帖子,但没有关于循环遍历列表来填充它们的帖子。有什么建议吗?

【问题讨论】:

  • x y z l1 w1 根本没有说明这一点。所以你想要 5 列,但你只给出 2 个值,其余的是不存在的事物的名称。
  • @roganjosh 第一列中的值将全部相同,第二列中的值将全部相同,第三列中的值将全部相同。第四列和第五列中的值将从两个单独的列表中提取
  • 其他两个列表是 python 列表对象还是已经在一个 numpy 数组中?它们的长度是否相同,或者它们是否有可能成为不同的尺寸?如果一个列表比另一个列表长,您希望使用哪些值作为填充符?
  • @loganjones16 抱歉 - 是的,我的代码检查以确保两个列表的长度相同。它们在一个列表对象中。如果将这两个列表放入一个 numpy 数组中会有帮助吗?
  • 我建议尽可能将事物转换为 numpy,因为它更容易执行复杂的功能(查看 numpy 切片,这是有史以来最好的事情)。但是,您必须在创建它时知道它的长度,而不是随手添加。这是因为如果它有一定数量的空间,它可以进行性能优化。但是您始终可以使用 numpy.asarray() 将列表转换为 ndarray

标签: python arrays pandas list numpy


【解决方案1】:

我需要知道您的输入列表是什么样的,但我会尝试一下。 像这样?

array1 = [1,2,3,4]
array2 = ['a','b','c','d']

output_array = [['x','y','z',a1,a2] for a1,a2 in zip(array1,array2)]
print(output_array)

[['x', 'y', 'z', 1, 'a'], 
 ['x', 'y', 'z', 2, 'b'], 
 ['x', 'y', 'z', 3, 'c'], 
 ['x', 'y', 'z', 4, 'd']]

我在这里使用的东西: zip(遍历 2 个数组并对齐它们,首先从一个列表与第一个列表到第二个列表......然后是 2nds 等等......)

list comprehension(创建一个内联列表,google 一下,很多很好的解释)

如果您想将其转回熊猫数据框:

import pandas as pd
pd.DataFrame(columns=['a','b','c','d','e'], data=output_array)

【讨论】:

  • 你能把它放在 numpy 或 pandas 的形式吗?我想这就是提问者想要的。
  • 已更新,基于原始问题,我认为起始数据在列表中。
【解决方案2】:

如您在 cmets 中所说,如果您的 x、y 和 z 值重复,您可以使用 numpy.full 轻松创建这些值。如果两个不同大小的列表相同并且确定了行数,那么通过调用list1 = numpy.asarray(list1) 并再次调用list2 将它们转换为numpy.ndarrays 将非常容易。您可以使用len(list1) 获取它们的长度。然后,您可以查看用于将 numpy 数组附加在一起的 numpy stacking (hstack) 函数。

import numpy as np
# expects there to be scalars: x, y, and z 
# and two lists: list1, list2
length = len(list1)
list1 = np.asarray(list1)
list2 = np.asarray(list2)
x = np.full(length, x)
y = np.full(length, y)
z = np.full(length, z)

combo = np.hstack((x, y, z, list1, list2))

如果这一切都是在 numpy 中完成的,那么一切都需要是相同的数据类型(int、float、boolean 等)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-28
    • 1970-01-01
    • 1970-01-01
    • 2011-09-16
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多