我有一个3d,3x3x3整数数组。 Numpy会将这些打印为第一个3x3的块,然后是第二个3x3,然后低于第三个3x3。
如果我想打印这3个3x3的BESIDE,而不是彼此之下,我怎么能告诉numpy以不同方式打印?
答案 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))