我有一个如下格式的数组(修改后适合此处):
array([(0.358174, -0.508718, 2728, 0.103, 23.255, 22.633, 22.459, 21.911, 21.211, 0.487, 0.126, 0.145, 0.129, 0.264, 23.028, 22.621, 22.563, 22.039, 21.24 , 0.378, 0.164, 0.14 , 0.125, 0.248, 3, 1),
...,
(3.881584, -0.209449, 5052, 0.075, 22.778, 22.741, 22.187, 21.901, 21.29 , 0.308, 0.128, 0.124, 0.148, 0.345, 22.801, 22.859, 22.291, 22.047, 21.441, 0.285, 0.141, 0.119, 1.056, 0.323, 3, 0)],
dtype=[('ra', '<f8'), ('dec', '<f8'), ('run', '<i2'), ('rExtSFD', '<f8'), ('uRaw', '<f8'), ('gRaw', '<f8'), ('rRaw', '<f8'), ('iRaw', '<f8'), ('zRaw', '<f8'), ('uErr', '<f8'), ('gErr', '<f8'), ('rErr', '<f8'), ('iErr', '<f8'), ('zErr', '<f8'), ('uRawPSF', '<f8'), ('gRawPSF', '<f8'), ('rRawPSF', '<f8'), ('iRawPSF', '<f8'), ('zRawPSF', '<f8'), ('upsfErr', '<f8'), ('gpsfErr', '<f8'), ('rpsfErr', '<f8'), ('ipsfErr', '<f8'), ('zpsfErr', '<f8'), ('type', '<i2'), ('ISOLATED', '<i4')])
我想找到一种方法将这个数组保存在一个txt文件中,这样当我返回data.dtype.names[:5]
时,例如(重新加载文件),我可以得到('ra', 'dec', 'run', 'rExtSFD', 'uRaw')
。
但是,到目前为止我所做的所有尝试(例如使用np.savetxt
,并为所有dtypes
设置fmt='%f...'
)都没有成功。我不想求助于Pandas。有人有什么建议吗?
1条答案
按热度按时间ni65a41a1#
下面是一个小例子:
保存阵列,并显示生成的文件:
这可以装载:
savetxt
只是遍历arr
,并将fmt%tuple(row)
写入文件。数组dtype不用于此操作。header
可以从arr.dtype.names
派生。我显式地关闭了默认的注解字符。genfromtxt
读取文本文件;dtype=None
告诉它推导列数据类型。names=True
告诉它从标题中获取数据类型名称。如果没有标头,或者忽略它,我们可以直接使用dtype:
注意,csv文件本身并不直接具有dtype信息;它必须被推断出来,或者你必须事先知道它。