2010-11-02 56 views
2

我有一个3d,3x3x3的整数数组。 Numpy将打印这些作为第一个3x3的块,然后在第二个3x3下面,然后在第三个3x3下面打印。你可以改变numpy打印阵列的方式吗?

如果我想打印这3个3x3块彼此,而不是彼此下面,我会如何告诉numpy打印不同?

+0

只写你自己的printNPArr/strNPArr功能。 – kennytm 2010-11-02 17:59:54

回答

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__功能(获取的对象的字符串表示时被调用)将其转换成规则阵列,并打印。

+2

解释你在做什么不会有什么伤害......教一个男人去钓鱼和所有这些。 – zdav 2010-11-02 18:05:29

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))