Можете ли вы изменить способ печати массивов numpy? - PullRequest
2 голосов
/ 02 ноября 2010

У меня есть массив целых чисел 3x3x3.Numpy напечатает их как блок первых 3x3, затем под ним 2-й 3x3, а затем ниже 3-го 3x3.

Если бы я хотел напечатать эти 3 блока 3х3 ВНУТРИ друг друга, а не друг под другом, как бы я сказал numpy печатать по-другому?

Ответы [ 2 ]

3 голосов
/ 02 ноября 2010
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))
3 голосов
/ 02 ноября 2010
class MyArray(numpy.array):
    def __str__(self):
        print [[[d for d in c] for c in b] for b in a]

Это, по существу, подклассы numpy.array и просто изменяется функция __str__ (которая вызывается при получении строкового представления объекта), которая преобразует его в обычный массив и печатает его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...