【问题标题】:Merge array lists into one array list将数组列表合并为一个数组列表
【发布时间】:2020-01-26 12:26:05
【问题描述】:

我在这个问题上花费的时间比我愿意承认的要多。 我有一个函数叫做:

def array_funct(filename):
...
 data = np.array((array))
 return data

从文件夹中读取 .txt 文件并返回一个 numpy 数组。

第一是x坐标列表,第二行是对应的y坐标。因此我使用:

array_funct(filename)[:,0]
array_funct(filename)[:,1]

访问 x 和 y 坐标。

现在我要做的就是创建一个 for 循环,它将读取多个文件并以下列方式存储它们

for i in range(0,number_of_files):

    array_funct(file[i])[:,0]
    array_funct(file[i])[:,1]

让我们看看我得到的 x 列表:

print(array_funct(file[0])[:,0])  
[1,2,3,4]
print(array_funct(file[1])[:,0]) 
[2,4,6,8]

我想要的只是获取这两个类似 numpy 的列表并创建:

x_tot = [[1,2,3,4], [2,4,6,8]]

这样我就可以像这样访问单个列表元素:

x_tot[0] = [1,2,3,4]

有这么难吗?我应该停止使用 numpy 数组吗?如果可能的话,我想留在 numpy。

另外请记住,我只为 2 个文件制作了这个示例,但它可能更多。我只想为要读取的可变数量的文件创建一个 x_tot 和 y_tot。这样:

x_tot = [[1,2,3],[2,3,4],[..],..]
x_tot = [[2,4,6],[4,6,8],[..],..]

【问题讨论】:

    标签: python arrays list numpy merge


    【解决方案1】:

    给定以下array_funct 函数和filenames 列表:

    def array_funct(filename):
        # Fake random data, replace with data read from file
        data_read = [[1,2,3,4], [5,6,7,8]] # [random.sample(range(1, 10), 7), random.sample(range(1, 10), 7)]  
        data = np.array(data_read) 
        return data
    
    filenames = ['file1.txt', 'file2.txt']
    

    试试这个代码:

    lx = [list(array_funct(file)[0]) for file in filenames]
    ly = [list(array_funct(file)[1]) for file in filenames]
    

    或者通过一次读取和滚动文件更有效:

    all_data = [(list(arr[0]),list(arr[1])) for arr in [array_funct(f) for f in filenames]]
    lx, ly = list(map(list, zip(*all_data)))
    

    在这两种情况下,输出如下:

    # lx = [[1, 2, 3, 4], [1, 2, 3, 4]]
    # ly = [[5, 6, 7, 8], [5, 6, 7, 8]]
    

    【讨论】:

      【解决方案2】:

      类似:

      x_tot = np.array([array_funct(file[i])[:,0] for i in range(0,number_of_files)])
      

      应该可以。

      【讨论】:

      • 它可以工作,但它还包括单词“数组”。那是问题吗? [数组([ 16863.2, 23735., 107915.1, 52643.9, 68688.5, 74618.5, 94618.5]) 数组([ 16864.3, 23737.3, 107917.4, 52645.7, 68690.8, 74620.6])]6
      • array_funct(file[i])[:,0] 你得到一个 numpy 数组(这就是 'array' 词的原因),我做了一个列表理解来加入每个文件的 numpy 数组,最后,因为你说过你想留在 numpy 我用 np.array() 转换了 numpy 数组中的列表。
      • 你是对的,在纸上它应该可以工作。但我得到一个“ValueError:设置一个带有序列的数组元素。”但是,如果我使用像 x_tot = [[1,2,3],[2,3,4]] 这样的常规 np 列表,它会起作用。有些东西不太正常
      • 有趣。像 [list([1, 2, 3, 4, 5, 9, 8, 7]) list([5, 4, 10, 11, 3]) list([3, 6, 7, 12, 7 , 9])] 这也是一个可以读入的np对象,没问题。但是 [array([ 16863.2, 23735. , 107915.1, 52643.9, 68688.5, 74618.5, 94618.5]) array([ 16864.3, 23737.3, 107917.4, 52645.7, 68690.8, 74620]) 为什么不能读取...6 >
      猜你喜欢
      • 2012-01-27
      • 2014-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2020-03-20
      • 2023-03-26
      • 2014-06-04
      相关资源
      最近更新 更多