【问题标题】:Iterate over files in a folder to create numpy array遍历文件夹中的文件以创建 numpy 数组
【发布时间】:2012-10-26 23:43:54
【问题描述】:

这是我的第一篇文章,我对编程真的很陌生 - 我有一个文件夹,其中包含一些我想要处理的文件,然后使用我需要的值创建一个 numpy 数组:

listing = os.listdir(datapath)
my_array=np.zeros(shape=(0,5))
for infile in listing:
    dataset = open(infile).readlines()[1:]
    data = np.genfromtxt(dataset, usecols=(1,6,7,8,9))
    new_array = np.vstack((my_array, data))

虽然我在列表中有 2 个文件(数据路径文件夹),但 new_array 数组会覆盖数据并只给我第二个文件的值 有任何想法吗? 谢谢,

【问题讨论】:

    标签: arrays file text numpy


    【解决方案1】:

    如果我对您的理解正确,您的问题的解决方案就是您需要将其 vstack 到“my_array”而不是新的。

    只需用这一行替换最后一行,它应该可以工作:

    my_array = np.vstack((my_array, data))
    

    但是,我认为这不是最有效的方法。由于您知道该文件夹中有多少文件,因此只需预定义数组的大小并填充其内容即可。

    【讨论】:

    • 感谢 HyperCube - 效果很好(让我觉得它是多么简单) -
    • 我实际上试图预定义一个数组(np.zeros),但后来我未能正确填写它 - 我要么追加/添加行,要么用新数组替换整个数组......
    【解决方案2】:

    这是从特定文件夹读取 numpy 数组中的所有文件所需执行的操作。我有一个文件夹 test 只包含 .txt 文件。我的以下file.py 与所有.txt 文件位于同一个test 文件夹中。每个.txt 文件都包含一个 4x4 矩阵/数组。运行脚本后,获得的matrices 将是一个 [Nx4x4] 的 numpy 数组。

    import numpy as np
    from glob import glob
    
    def read_all_files():
       file_names = glob('test/*')
       arrays = [np.loadtxt(f) for f in file_names]
       matrices = np.concatenate(arrays)
    

    【讨论】:

    • 如果你有一个 Python 的 ndarray 列表,那么你也可以调用 np.array(arrays) 而不是 concat
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2023-03-03
    • 2017-07-18
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    相关资源
    最近更新 更多