python - pretty-print 并替换 numpy 数组

标签 python json numpy pretty-print

想象一下,我正在打印一个 JSON 解码的对象,其结构如下:

{Stack
   Layer
     Material
       <array>
}

其中这些变量对应于模拟中的结构层次结构。在层次结构的末尾,有一个 numpy 数组对象。这些数组往往非常大,所以我宁愿不显式打印它们,而是打印一个摘要。所以代替:

{Stack
   Layer
     Material
       array([1,2,3,4,5......])
}

它看起来像:

{Stack
   Layer
     Material
       array: dtype, shape
}

IE pretty-print 不会打印完整的数组,而只是通过打印形状和数据类型来总结其信息。 PrettyPrint 中可以进行此类定制吗?

最佳答案

好吧,我是一名分子生物学家,而不是专业程序员,所以请耐心等待。
在我非常天真的观点中,你不应该考虑太多,其中一个选择是制作你自己的 pprint 版本,了解 numpy 的 ndarray 对象,并按照您想要的方式打印它们。

我所做的,并且它对我有用,是打开 pprint 模块(在 Lib 目录下)并创建一个修改后的副本,如下所示:

(我将工作的、修改后的代码粘贴到pastebin上,你可以找到它here)

首先,在导入部分中,尝试导入 numpy 的 ndarray,方法是添加:

try:
    from numpy import ndarray
    np_arrays = True
except ImportError:
    np_arrays = False

然后,在 _format 函数的定义中,紧接着以下内容:

# This is already there
if self._depth and level > self._depth:
    write(rep)
    return

(所以在我的副本中的第 154 行,导入之后)您应该添加:

# Format numpy.ndarray object representations
if np_arrays and issubclass(typ, ndarray):
    write('array(dtype:' + str(object.dtype))
    write('; shape: ' + str(object.shape) + ')')
    return

(然后函数继续,r = getattr(typ, "__repr__", None)...)

现在将此脚本保存在 pprint 所在的同一 Lib 目录中,使用新名称,例如 mypprint.py,然后尝试:

from mypprint import pprint
pprint.pprint(object_with_np.arrays)  

关于python - pretty-print 并替换 numpy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27929895/

相关文章:

python - python del函数中的"backtracking"变量

java - SpringMVC 响应 json 不适合 boolean 属性

ios - 使用 Swift 字典解析 JSON

python - 如何快速将返回的 Python-in-Lua numpy 数组转换为 Lua Torch Tensor?

python - 快速、干净地查找 Numpy 数组索引的方法

python - 如何加快对部分 numpy 数组的迭代

python - 将 Python Flask-sqlalchemy 查询结果作为列表理解进行迭代

python - CDF累积分布函数误差

python - 试图理解为什么只在第一次调用嵌套 for 循环

php - json_decode file_get_contents 帮助