事
print({n: np.random.randn(50, 50, 50) for n in 'abcd'})
字符串
打印出一个很大的混乱。在MATLAB中,它显示
"a" ⟼ {50×50×50 double}
"b" ⟼ {50×50×50 double}
"c" ⟼ {50×50×50 double}
"d" ⟼ {50×50×50 double}
型
是否有一个选项来显示数组在“汇总模式”?如果没有,限制其最大大小,在字符数?
我能想到的最简单的办法就是
s = np.array2string(np.random.randn(50, 50, 50))
print(s[:200] + ' ...\n' + s[-200:])
型
这给
[[[-2.20155640e+00 9.73402046e-01 -1.57076829e+00 ... 1.71643279e-01
-6.92943943e-01 -1.8014576
...
141624e+00 -3.51233625e-01 8.39485094e-01 ... 5.81172472e-01
-1.59288538e+00 6.68331170e-01]]]
型
但这就像把一页纸撕成两半。
[[[-2.20155640e+00 9.73402046e-01 -1.57076829e+00 ... 1.71643279e-01
-6.92943943e-01 ...
...
[[ ... -3.51233625e-01 8.39485094e-01 ... 5.81172472e-01
-1.59288538e+00 6.68331170e-01]]]
型
但这将需要在array2string
的输出上手动编写大量代码。
是否有内置的支持来做这样的截断?我在np.printoptions中没有找到它。我会接受“no”作为答案(如果它是答案)。
2条答案
按热度按时间gudnpqoy1#
np.printoptions
不支持沿沿着不同维度以不同方式截断数组,因此不可能通过 * 仅 * 设置打印选项来复制所需的截断行为。要使用
np.printoptions
接近,可以设置edgeitems
来控制在每个维度的开始和结束处显示的项目数。举例来说:
字符串
对于高维数组来说,这仍然会很快变得混乱,但至少是一个渐进的改进。我们可以通过使用
re.sub
追溯删除一些内部行来改进这一点。要删除第一个维度>1和<N的内部“块”,可以使用以下模式:型
或者,要沿第N-1维删除第一个和最后一个
...
沿着之间的所有内容,可以使用型
这很好地推广到具有更多边项的更高维数组:
型
或者,如果你只想在数组的最开始和最结束处显示少数项目,你可以在显示数组之前将其展平:
型
这放弃了关于数组形状的上下文提示,但允许更简洁的输出。
防脏变体(可能):在可能牺牲美观的情况下,我们可以保证打印不超过5行,如下:
型
vwoqyblh2#
将合并
numpy.array2string
与最小edgeitems
和threshold
参数+textwrap.wrap
组合,以实现可调 Package :字符串
示例输出:
型