我将(x,y)数据存储到sqlite3数据库中,它们显示为“BLOB”。例如。第一个BLOB的大小为5653。
为了阅读第一个BLOB,我使用:
db = sqlite3.connect(sqlite_db)
cur = db.cursor()
cur.execute('SELECT spectrum FROM spectra WHERE rowid=1')
sample_xy_blob = cur.fetchone()[0]
print(sample_xy_blob)
print(type(sample_xy_blob))
sample_xy_np = np.loadtxt( sample_xy_blob)
print(sample_xy_np)
print(type(sample_xy_np))
db.close()
打印输出如下所示:
>>> b'94.075\t.1\r\n95.057\t.4\r\n96.050\t2.8\r\n97.034\t3.8\r\n97.094\t.3\r\n97.143\t.1\r\n98.040\t.2\r\n98.066\t.4\r\n99.050\t6.0\r\n99.188\t.1\r\n100.053\t.2\r\n100.078\t.2\r\n101.065\t.6\r\n102.061\t.2\r\n103.049\t1.6\r\n103.143\t.1\r\n104.067\t.1\r\n104.106\t.2\r\n106.089\t.2\r\n109.0...
<class 'bytes'>
[ 57. 52. 46. ..., 10. 13. 10.]
<class 'numpy.ndarray'>
>>> print(sample_xy_np.shape)
(5653,)
如何从中获取2D(x,y)numpy数组?
感谢您的任何想法。
答案 0 :(得分:0)
问题是BLOB的解码,必须将其转换为字符串,然后转换为数字数组。这可以通过以下方式完成:
spec_xy_np = np.fromstring(spec_xy_blob, sep = '\t')
spec_xy_np = np.reshape(spec_xy_np, (-1, 2))
第一个命令生成数字1D数组。分隔符选项sep ='\ t'对于避免因空行而导致的错误非常重要。第二行将1D数组更改为2D(x,y)数组,而不需要条目数。