numpy中的可变/未知长度字符串/unicode数据类型

2024-09-24 22:23:42 发布

您现在位置:Python中文网/ 问答频道 /正文

是否可以用未知字段长度的文本字段加载数组?在

我发现了如何传递dtype来获取字符串。但是,没有指定长度,我只得到U0。似乎无法保存任何数据的类型。E、 g组:

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')])

当我切换到指定大小的模式时,我得到输入:

^{pr2}$

我对S或{}都没问题。我的例子中的字段应该用来保存一组文本标志。比如linux环境变量。因此,预先分配大空间以防万一似乎是一种巨大的浪费。尤其是当行数达到数百万时。在

我知道,或者有想法,这样的设计可以从哪里来。比如构造一个类似struct的对象,在连续内存块中保存整行。然而,我想也许有一种方法可以让它像指针一样在字符串的情况下保持不变。在

有可能吗?在


Tags: 数据字符串iotest文本类型data数组
1条回答
网友
1楼 · 发布于 2024-09-24 22:23:42

getting indices in numpy 使用np.recfromtxt,它可以自动生成dtype。它有效地使用dtype=None调用np.genfromtxt。在

数据如下:

david weight_2005 50
david weight_2012 60
david height_2005 150
david height_2012 160

产生一个:

^{pr2}$

genfromtxt中用于确定dtype的代码看起来很复杂。我猜它会调整Snn以适应它在该字段中遇到的最长字符串。在

自定义dtype的一种方法是在getnfromtxt中分配{},并用astype重新计算后面的值。在

x=np.genfromtxt('stack19944408.txt',dtype=None,names=['one','two','thr'])
x.astype(dtype=[('one','S10'),('two','S10'),('thr','f')])
#array([('david', 'weight_200', 50.0), ('david', 'weight_201', 60.0),
#       ...
#      dtype=[('one', 'S10'), ('two', 'S10'), ('thr', '<f4')])

相关问题 更多 >