2010-11-02 58 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))