使numpy数组JSON可序列化

Dru*_*els 8 python arrays json numpy python-3.x

我有一个程序以NumPy数组的形式处理数据,需要以JSON形式存储(以后将其传递给另一个程序以可视化数据).当我尝试以下内容时:

my_array = np.array([3, 4, 5])
json.dumps(my_array)
Run Code Online (Sandbox Code Playgroud)

我收到一条错误信息

TypeError: array([3, 4, 5]) is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

事实证明,数组不可序列化.我希望通过将数组转换为普通列表来解决这个问题,但是如果我尝试的话

my_array = np.array([3, 4, 5])
my_list = list(my_array)
json.dumps(my_list)
Run Code Online (Sandbox Code Playgroud)

我只是读错了

TypeError: 3 is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

(这3似乎是因为'3'是列表的第一个元素)

更奇怪的是,当我尝试从头开始重建列表时,这个错误仍然存​​在:

def plain_list(ls):
  pl = []
  for element in ls:
    pl.append(element)
  return pl

my_array = np.array([3, 4, 5])
my_list = plain_list(my_array)
json.dumps(my_list)
Run Code Online (Sandbox Code Playgroud)

仍然回来

TypeError: 3 is not JSON serializable
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 即使最后一个不起作用,怎么样?它不应该"忘记"有关曾经是NumPy阵列的一切吗?NumPy数组中的整数与普通整数不是真正相同的对象,它们是否带有一些特殊的不可见属性,即使在数组之外也是如此?
  2. 如何能有效地利用存储在JSON形式(无论该解决方案可如何错综复杂的需要来定)阵列?

use*_*ica 10

3是一个NumPy整数,它显示为常规Python int,但不是一个.使用tolist让普通的Python整数列表:

json.dumps(my_array.tolist())
Run Code Online (Sandbox Code Playgroud)

这也将多维数组转换为嵌套列表,因此您不必处理3维数组的3层列表推导.