当前位置: 首页 > 面试题库 >

如何在保留矩阵尺寸的同时序列化一个numpy数组?

壤驷彦
2023-03-14
问题内容

numpy.array.tostring似乎并没有保留有关矩阵尺寸的信息,要求用户向发出呼叫numpy.array.reshape

有一种方法可以在保留此信息的同时将numpy数组序列化为JSON格式?

注意: 数组可能包含整数,浮点数或布尔值。期望转置数组是合理的。

注2: 这样做是为了使numpy数组使用streamparse通过Storm拓扑,以防此类信息最终变得有意义。


问题答案:

pickle.dumpsnumpy.save对重构任意NumPy数组所需的所有信息进行编码,即使存在字节序问题,不连续的数组或奇怪的元组dtype。字节序问题可能是最重要的;您不希望array([1])突然array([16777216])因为在大型字节序的计算机上加载阵列而变得无所作为。pickle尽管save有其自身的优势(npy格式合理性给出),它可能是更方便的选择。

pickle选项:

import pickle
a = # some NumPy array
serialized = pickle.dumps(a, protocol=0) # protocol 0 is printable ASCII
deserialized_a = pickle.loads(serialized)

numpy.save使用二进制格式,它需要写入文件,但是您可以使用以下方法解决io.BytesIO

a = # any NumPy array
memfile = io.BytesIO()
numpy.save(memfile, a)
memfile.seek(0)
serialized = json.dumps(memfile.read().decode('latin-1'))
# latin-1 maps byte n to unicode code point n

并反序列化:

memfile = io.BytesIO()
memfile.write(json.loads(serialized).encode('latin-1'))
memfile.seek(0)
a = numpy.load(memfile)


 类似资料:
  • 问题内容: 我有以下内容: 如何在XYZ_2上执行与在XYZ_2上相同的操作?我会以某种方式首先重塑数组吗? 问题答案: 您似乎正在尝试的最后一个轴 与最后一个 。因此,您可以像这样使用- 相关帖子了解。 为了完整起见,在交换的最后两个轴后,我们当然也可以使用,例如- 这将不如一个高效。 运行时测试- 一般而言,涉及张量时,效率要高得多。由于的轴只有一个,因此我们可以通过重整,使用,获取结果并将其

  • 我们将土地表示为一个二维的高度数组,并使用以下模型,基于水流下坡的想法: 如果一个细胞的八个相邻细胞都有较高的海拔,我们称这个细胞为盆地;水汇集在盆地里。 否则,水会流向海拔最低的邻近细胞。 9 9 9 8 7 7 7 8 8 7 7 7 8 8 8 7 7 7 8 8 8 9 9 9 8 8 8 7 7 7 4 4 5 5 5 5 5 5 5 6 6 7 5 5 5 8 8 8 6 尺码8 9

  • 问题内容: 我对(N,)维数组和(N,1)维数组之间的转换有疑问。例如,y是(2,)维。 但是下面将显示y2为(2,1)维。 在不复制的情况下将y2转换回y的最有效方法是什么? 谢谢汤姆 问题答案: 为此工作 还请注意,除非需要复制新形状(在这里不需要这样做),否则它不会复制数据:

  • 问题内容: 我正在使用Numpy将数据存储到矩阵中。从R背景开始,有一种极其简单的方法将函数应用于矩阵的行/列或两者。 python / numpy组合是否有类似的东西?编写自己的小实现不是问题,但是在我看来,我想出的大多数版本都将比现有的实现效率低得多/占用更多内存。 我想避免从numpy矩阵复制到局部变量等,这可能吗? 我尝试实现的功能主要是简单的比较(例如,某列中有多少个元素小于数字x,或者

  • 问题内容: 假设我有一个由列表列表组成的矩阵,如下所示: 同样,假设我有一个具有相同结构的numpy矩阵,称为: 使用numpy,我可以得到这个矩阵的子矩阵,如下所示: 我可以像这样在纯Python中复制numpy矩阵切片: 这不是世界上最容易阅读的东西,也不是最有效的:-) 问题:是否有更简单的方法(在纯Python中)将任意矩阵切片为子矩阵? 问题答案: 您还可以通过定义以下子类来模仿NumP

  • 问题内容: 我是Numpy的新手,想替换矩阵的一部分。例如,我有两个由numpy生成的矩阵A,B 最终,我想使A为以下矩阵。 和/或以下 我尝试跟随,但没有用。我现在不知道了:( 甚至我尝试过 检查四个单元是否更改。你有什么主意吗? 问题答案: 这是您可以执行的操作: