- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在处理 numpy 数组形式的图像。我需要将它们序列化为 JSON 或从 JSON 反序列化(我使用的是 MongoDB)
numpy数组无法用json.dump序列化;我知道this但我想知道是否有更好的方法,因为将 bytes numpy 数组转换为 BSON 会将字节数乘以几乎 12 (我不明白为什么):
import numpy as np
import bson
from io import StringIO as sio
RC = 500
npdata = np.zeros(shape=(RC,RC,3), dtype='B')
rows, cols, depth = npdata.shape
npsize = rows*cols*depth
npdata=npdata.reshape((npsize,))
listdata = npdata.tolist()
bsondata = bson.BSON.encode({"rows": rows, "cols": cols, "data": listdata})
lb = len(bsondata)
print(lb, npsize, lb/npsize)
> 8888926 750000 11.851901333333334
最佳答案
字节数增加的原因是 BSON 保存数据的方式。您可以在 BSON specification 中找到此信息,但让我们看一个具体的例子:
import numpy as np
import bson
npdata = np.arange(5, dtype='B') * 11
listdata = npdata.tolist()
bsondata = bson.BSON.encode({"rows": rows, "cols": cols, "data": listdata})
print([hex(b) for b in bsondata])
在这里,我们将一个值为 [0, 11, 22, 33, 44, 55]
的数组存储为 BSON 并打印生成的二进制数据。下面我对结果进行了注释以解释发生了什么:
['0x47', '0x0', '0x0', '0x0', # total number of bytes in the document
# First element in document
'0x4', # Array
'0x64', '0x61', '0x74', '0x61', '0x0', # key: "data"
# subdocument (data array)
'0x4b', '0x0', '0x0', '0x0', # total number of bytes
# first element in data array
'0x10', # 32 bit integer
'0x30', '0x0', # key: "0"
'0x0', '0x0', '0x0', '0x0', # value: 0
# second element in data array
'0x10', # 32 bit integer
'0x31', '0x0', # key: "1"
'0xb', '0x0', '0x0', '0x0', # value: 11
# third element in data array
'0x10', # 32 bit integer
'0x32', '0x0', # key: "2"
'0x16', '0x0', '0x0', '0x0', # value: 22
# ...
]
除了一些格式开销之外,数组的每个值都相当浪费地使用 7 个字节进行编码:1 个字节用于指定数据类型,2 个字节用于包含索引的字符串(三个字节用于索引 >=10,四个字节用于指定数据类型)对于索引 >=100, ...) 和 4 个字节用于 32 位整数值。
这至少解释了为什么 BSON 数据比原始数组大得多。
我找到了两个库 GitHub - mongodb/bson-numpy和 GitHub - ajdavis/bson-numpy这可能会更好地在 BSON 中编码 numby 数组。但是,我没有尝试过它们,所以我不能说是否是这种情况,或者它们是否工作正常。
关于arrays - 为什么 BSON 序列化的 numpy 数组比原始数组大得多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46460443/
我试图理解 BSON 符号 来自网站 BSON Site .但是,我无法理解相关性背后的原因。 我也提到了以下问题,但由于以下原因,我不相信。 Question 1 : 不熟悉 ruby 实现 Que
我收到以下错误: { [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' } js-bson:
假设我们有一个字符串,里面有二进制 bson 数据。如何加载到 bson object ? 最佳答案 我想在同一个页面上有一个例子可以做到这一点: BSONObjBuilder b; b << "na
我正在寻找如下所示的 type_of 方法: import bson bson.type_of(42) # it should return "int". bson.type_of("hello")
Base64 编码的 BSON 比 BSON 小吗? 最佳答案 Piskvor 的权利,base64 编码的任何东西都比原始长。您对某些内容进行 base64 编码以使其进入具有有限字符轨道的 cha
目前正在做一个 Golang 项目,但我得到了一些 Controller package controller import ( "go.mongodb.org/mongo-driver
这个特定的问题与使用 mongodb 和 golang 包 mongo-driver 相关。 ,但我认为这适用于与 mongodb 的大多数接口(interface)。 使用 Find 时要从集合中查
目前正在做一个 Golang 项目,但我得到了一些 Controller package controller import ( "go.mongodb.org/mongo-driver
可能相关:How to use interface type as a model in mgo (Go)? 我有一个像这样的结构: type Game struct { ID b
有没有一种方法可以使用 MongoDB C++ 驱动程序中的 BSON() 宏来生成 BSON 将空值。例如,为了生成一个 BSON 来表示这个文档:{"a": "foo", "b": null}:
我通过以下两种不同的方法生成了一个 ObjectId: user@ubuntu:~$ python Python 2.7.1+ (r271:86832, Apr 11 2011, 18:05:24)
我如何转换 BsonDocument到 FilterDefinition实例? 它是新的 MongoDb C# 驱动程序提供的类。 最佳答案 BsonDocument 和 FilterDefiniti
我正在尝试从 Json 生成 Bson。我尝试使用 Json.Net,但似乎有记录的行为,其中库为整数字段生成 uint64。不幸的是,我们必须使用 uint32。 因此我正在尝试使用 mongodb
我正在使用 https://github.com/mongodb/mongo-go-driver和目前正在尝试实现此类结构的部分更新 type NoteUpdate struct { ID
我目前正在尝试读取 bson 文件以将其导入数据库。我已经可以读取该文件并将其作为字节打印,但最终只收到 bson.errors.InvalidBSON: objsize Too Large 错误。
我尝试在 arch linux 迷你计算机(cubox)上安装 mean.io 堆栈。所以我安装了 nodejs 和 mongodb 包。 我用 Git 检索了堆栈,进行了 npm 安装(没问题)但是
为什么会输出false?我期待 true... package main import ( "fmt" "time" "gopkg.in/mgo.v2/bson" )
这是一种愚蠢的语法错误,尝试了很多方法,但都无法正常工作,请大家帮忙。 使用 mgo 在 Go 中使用 MongoDB,我只是尝试简化 $ne 运算符的使用,代码如下所示,但不断出现编译语法错误: l
我设置了新的 Typescript/React 项目,在 tsconfig.json 文件中收到此错误消息 "找不到 'bson' 的类型定义文件。该文件在程序中,因为:隐式类型库 'bson' 的入
我尝试将数据从 SQL Server 迁移到 MongoDB,但在将数据导入到 MongoDB 的最后阶段遇到了以下类型错误。 mongoImp = dbo.insert_many(jArray)
我是一名优秀的程序员,十分优秀!