你能改变numpy打印阵列的方式吗?

时间:2010-11-02 17:57:25

标签: python numpy

我有一个3d,3x3x3整数数组。 Numpy会将这些打印为第一个3x3的块,然后是第二个3x3,然后低于第三个3x3。

如果我想打印这3个3x3的BESIDE,而不是彼此之下,我怎么能告诉numpy以不同方式打印?

2 个答案:

答案 0 :(得分:3)

class MyArray(numpy.array):
    def __str__(self):
        print [[[d for d in c] for c in b] for b in a]

这基本上是子类numpy.array,只是更改__str__函数(在获取对象的字符串表示时调用),将其转换为常规数组并打印出来。

答案 1 :(得分:3)

import numpy as np   
arr=np.random.random((3,3,3))    
print(arr)
# [[[ 0.05733376  0.00646892  0.96180769]
#   [ 0.11560363  0.56058966  0.83942817]
#   [ 0.5520361   0.17355794  0.87699437]]

#  [[ 0.90999361  0.03036473  0.5064459 ]
#   [ 0.76169531  0.48234618  0.56884999]
#   [ 0.93220906  0.9460365   0.65307273]]

#  [[ 0.04400683  0.58783221  0.74281147]
#   [ 0.69999475  0.14870245  0.32175415]
#   [ 0.20044376  0.11985585  0.69949965]]]

for rows in zip(*arr):
    print('\t'.join(map(str,rows)))
# [ 0.05733376  0.00646892  0.96180769] [ 0.90999361  0.03036473  0.5064459 ]   [ 0.04400683  0.58783221  0.74281147]
# [ 0.11560363  0.56058966  0.83942817] [ 0.76169531  0.48234618  0.56884999]   [ 0.69999475  0.14870245  0.32175415]
# [ 0.5520361   0.17355794  0.87699437] [ 0.93220906  0.9460365   0.65307273]   [ 0.20044376  0.11985585  0.69949965]

为方便起见,您可以将其包装在一个函数中:

def format_arr(arr):
    result=[]
    for x in zip(*arr):
        result.append('\t'.join(map(str,x)))
    return '\n'.join(result)

print(format_arr(arr))