想象一下,我正在打印一个 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/