【问题标题】:Storing numpy array in sqlite3 database with python issue使用python问题在sqlite3数据库中存储numpy数组
【发布时间】:2016-08-17 10:34:36
【问题描述】:

我在 sqlite 数据库中存储 numpy 数组时遇到问题。我有 1 个包含名称和数据的表。

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(scikit-image)库中计算出来的。也许这是个问题... 也尝试从opencv3计算和存储它,但有同样的问题。

【问题讨论】:

  • 您需要说明链接中的解决方案如何不起作用。你到底尝试了什么?出了什么问题?
  • 我尝试了 unutbu 的答案来创建和转换我自己的数据类型,然后从数据库中插入和读取数据。结果与我在上面的问题中描述的相同。它将 numpy ndarray 存储到数据库中,但是当您读取它时,它会以某种方式进行编码。
  • 我想知道它是否保存了数组数据缓冲区的字节表示。将此值与data.tostring() 进行比较。

标签: python arrays numpy sqlite


【解决方案1】:

假设它正在将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])

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多