我有字符分隔文件,文件中有不同的设置
档案
//========================================================================
// 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']
因为我需要可以访问列的数组。
答案 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)
因此您可以根据需要使用特定列。