gpt4 book ai didi

python - 如何强制 numpy.genfromtxt 生成非结构化 numpy 数组?

转载 作者:太空宇宙 更新时间:2023-11-03 20:15:34 25 4
gpt4 key购买 nike

在 Python 3 中我这样做:

s = StringIO(u"1,1.3,abcde\n2,1.3,test")
data = numpy.genfromtxt(s, dtype=[int,float,'U10'], delimiter=',', names=None)

我得到:

array([(1, 1.3, 'abcde'), (2, 1.3, 'test')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U10')])

我想获得一个没有如下名称的常规 numpy 数组:

array([[1, 1.3, 'abcde'], 
[2, 1.3, 'test']])

可能吗?

最佳答案

带有文本列表:

In [338]: txt = '''1, 1.3, abcde 
...: 2, 1.3, def'''.splitlines()

结构化数组:

In [339]: np.genfromtxt(txt, dtype=None, delimiter=',', encoding=None)          
Out[339]:
array([(1, 1.3, ' abcde'), (2, 1.3, ' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U6')])

尝试指定对象 - 每个项目都有自己的类型:

In [340]: np.genfromtxt(txt, dtype=object, delimiter=',', encoding=None)        
Out[340]:
array([[b'1', b' 1.3', b' abcde'],
[b'2', b' 1.3', b' def']], dtype=object)

它不会尝试将任何字符串转换为数字。

converters 正确转换列,但由于某种原因仍然生成结构化数组:

In [341]: np.genfromtxt(txt, dtype=object, delimiter=',', encoding=None, convert
...: ers={0:int, 1:float})
Out[341]:
array([(1, 1.3, b' abcde'), (2, 1.3, b' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', 'O')])

但是您可以通过列表将结构化数组转换为对象数据类型:

In [346]: np.genfromtxt(txt, dtype=None, delimiter=',', encoding=None)          
Out[346]:
array([(1, 1.3, ' abcde'), (2, 1.3, ' def')],
dtype=[('f0', '<i8'), ('f1', '<f8'), ('f2', '<U6')])
In [347]: np.array(_.tolist(), object)
Out[347]:
array([[1, 1.3, ' abcde'],
[2, 1.3, ' def']], dtype=object)

另一种选择是自己拆分行,构建列表列表。 genfromtxt 只用了一些额外的功能就可以做到这一点。

In [357]: lines=[] 
...: for line in txt:
...: i = line.split(',')
...: x = (int(i[0]), float(i[1]), i[2].strip())
...: lines.append(x)

In [358]: lines
Out[358]: [(1, 1.3, 'abcde'), (2, 1.3, 'def')]
In [359]: np.array(lines,object)
Out[359]:
array([[1, 1.3, 'abcde'],
[2, 1.3, 'def']], dtype=object)

但请注意,您无法对该对象数组以及数值数组甚至结构化数组的数值字段进行数学运算。

关于python - 如何强制 numpy.genfromtxt 生成非结构化 numpy 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58469140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com