在SQLITE3数据库中存储NumPy数组时存在PYTHON问题

kd3sttzy  于 2022-11-10  发布在  SQLite
关注(0)|答案(2)|浏览(210)

在SQLite数据库中存储NumPy数组时遇到问题。我有一个表的名称和数据。

import sqlite3 as sql
from DIP import dip      # function to caclculate numpy array
name = input('Enter your full name\t')
data = dip()
con = sql.connect('Database.db')
c = con.cursor()

c.execute("CREATE TABLE IF NOT EXISTS database(Name text, Vein real )")
con.commit()
c.execute("INSERT INTO database VALUES(?,?)", (name, data))
con.commit()
c.execute("SELECT * FROM database")
df = c.fetchall()
print(data)
print(df)
con.close()

一切都很好,但当存储数据时,而不是这样:

[('Name', 0.03908678  0.04326234  0.18298542 ...,  0.15228545  0.09972548   0.03992807)]

我有这个:

[('Name', b'\xccX+\xa8.\x03\xa4?\xf7\xda[\x1f ..., x10l\xc7?\xbf\x14\x12\)]

这有什么问题吗?谢谢。
附注:我试了一下Python insert numpy array into sqlite3 database的解决方案,但不起作用。我的NumPy数组是用HOG(定向梯度直方图)从skImage(sorkit-Image)库中计算出来的。也许这是个问题..。我也试图从opencv3中计算并存储它,但遇到了相同的问题。

yqkkidmi

yqkkidmi1#

假设它将data.tostring()保存到数据库中,我尝试使用fromstring对其进行解码。
使用您显示的字符串,并修剪掉我得到的几个字节:

In [79]: np.fromstring(b'\xccX+\xa8.\x03\xa4?\xf7\xda[\x1f\x10l\xc7?', float)
Out[79]: array([ 0.03908678,  0.18298532])

至少有一个匹配的号码,所以这看起来很有希望。

juud5qan

juud5qan2#

我也遇到过类似的问题,我发现SQLite在存储自定义NumPy浮点类型(在我的例子中是np.float32)方面有问题。
将浮点值的类型更改为字符串,就可以很好地工作。
[float(x) for x in data]

相关问题