如何在特定字符串出现时创建新数组? numpy的

时间:2016-05-23 10:29:09

标签: python python-3.x numpy genfromtxt

我有字符分隔文件,文件中有不同的设置

档案

//========================================================================
// M A I N
//========================================================================
int main() {

    // get the AlgorithmRegistrar singleton
    AlgorithmRegistrar& registrar = AlgorithmRegistrar::getInstance();

    if(registrar.size() == 0) {
        // TODO: no algorithms loaded - print usage etc.
    }

    // get new instances of the algorithms and run them
    auto algorithms = registrar.getAlgorithms();
    auto& algorithmNames = registrar.getAlgorithmNames();
    auto pName = algorithmNames.begin();
    for(auto& algorithm: algorithms) {
        cout << *(pName++) << ": " << algorithm->sayHello() << endl;
    }

}
//========================================================================

我想用每组数据制作数组,我还需要从哪个集合中获取数据。我正在使用

@Set 1  
0,1,2,3  
2,3,4,5  
.  
.  
@Set 2  
3,4,5,6  
4,5,6,7  
.  
.

我可以看到with open('File', 'r') as f: data = {} numbers = [] for line in f: ln = line.strip() if '@Set' in ln: data[ln] = numbers numbers = [] elif ln: numbers.append([float(n) for n in ln.split(',')]) ,但我无法使用特定列,我想使用data['@Set 1']因为我需要可以访问列的数组。

2 个答案:

答案 0 :(得分:1)

with open('File', 'r') as f:
    data = {}
    numbers = []
    for line in f:
        ln = line.strip()
        if '@Set' in ln:
            data[ln] = numbers
            numbers = []
        elif ln:
            numbers.append([float(n) for n in ln.split(',')])

每个numbers应该是浮动列表的列表。传递每个np.array应该将它们转换为2d数组。

for k,v in data.items():
    data[k] = np.array(v)

使用genfromtxt利用它适用于任何输入行的输入

with open('File', 'r') as f:
    data = {}
    numbers = []
    for line in f:
        ln = line.strip()
        if '@Set' in ln:
            data[ln] = numbers
            numbers = []
        elif ln:
            numbers.append(ln)

for k, v in data.items()
    data[k] = np.genfromtxt(v, ...)

还有其他方法可以将一组行提供给genfromtxt,但这是我能写的最简单的,没有明显错误和需要测试。在Python3中,您可能必须使用rb文件模式。

我经常使用以下代码测试答案:

txt = b"""1.23,2,3
4.34,5,6
""".splitlines()
data = np.genfromtxt(txt,delimiter=',',dtype=None)

答案 1 :(得分:0)

您不能将np.genfromtxt用于此文件的格式。获得列表numbers后,您可以使用以下内容转换为np.array

import numpy as np
numbers_array = np.asarray(numbers)

因此您可以根据需要使用特定列。