【发布时间】:2014-01-05 22:20:10
【问题描述】:
是否可以以某种方式加载具有未知字段长度的文本字段的数组?
我想出了如何通过dtype 来获取字符串。但是,如果没有指定长度,我只会得到U0。似乎无法保存任何数据的类型。例如:
data = io.StringIO("test data lololol\ntest2 d4t4 ololol")
>>> ar = numpy.loadtxt(data, dtype=[("1",str), ("2",'S'), ("3",'S')])
>>> ar
array([('', b'', b''), ('', b'', b'')],
dtype=[('1', '<U0'), ('2', '|S0'), ('3', '|S0')])
当我更改为指定大小的模式时,我得到输入:
>>> data.seek(0)
0
>>> numpy.loadtxt(data, dtype=[("1",(str,30)), ("2",(str,30)), ("3",('S',30))])
array([("b'test'", "b'data'", b'lololol'),
("b'test2'", "b'd4t4'", b'ololol')],
dtype=[('1', '<U30'), ('2', '<U30'), ('3', '|S30')])
S 或 U 可能都可以。在我的案例中,该字段应该用于保存一组文本标志。类似于linux环境变量的东西。因此,为了以防万一而预先分配大空间似乎是一种很大的浪费。尤其是当行数达到数百万时。
我确实了解或有想法,这样的设计可以来自哪里。就像构造一个 struct 之类的对象,它将整行保存在连续的内存块中。但是,我想也许有办法让它在字符串的情况下像指针一样保持。
有可能吗?
【问题讨论】:
-
不是 numpy 适合的任务。例如,您可以使用
hash函数对字符串进行编码(即手动构造指针),并将主题存储在其他地方。
标签: python python-3.x numpy