2012-03-22 201 views
8

我有一个2维numpy的阵列,其看起来像这样:如何打印Numpy数组没有任何额外的符号(方括号[]和元素之间的空格)?

[[a b c] 
[d e f] 
[g h i]] 

我想打印它没有任何通常带有阵列的默认记法绒毛;即[,]和元素之间的空格。像这样的:

abc 
def 
ghi 

是否有可能做这样的事情(当然,没有一个微不足道的和可能昂贵的Python循环)?

我看过numpy.set_printoptions,但它看起来像只设置显示元素的显示选项,而不是显示元素间的字符。

编辑:所述阵列中的元件具有字符串表示,可以是任何东西,包括[]和空白。如何建立这样的阵列小例子:

class custom(object): 
    def __repr__(self): 
     return 'a' 
a = numpy.empty((5, 5), custom) 
a.fill(custom()) 
print a 
+0

只是要清楚:你的自定义再版包括终端'.'你想摆脱的,但可能包括你没有的其他人?我不确定我是否理解你想剥离什么。 – DSM 2012-03-22 20:18:21

+0

我的不好,这是由于我手工编辑表示。我原来的问题使用了一个普通数字的numpy数组,每个数字用作分隔符(或小数分隔符,不确定)后面有一个'.'。后来,我编辑我的问题,以反映数组的数据类型不一定是数字,并忘记相应地更改分隔符。再次编辑。 – 2012-03-22 20:28:03

+0

子集:只删除'[]':http://stackoverflow.com/questions/9360103/how-to-print-a-numpy-array-without-brackets/42046765#42046765 – 2017-02-04 23:18:52

回答

8

虽然这几乎达一个循环,我觉得这可能是你会得到最好的。通常,join字符串方法非常快。

>>> a = np.array([[1,2,3],[2,4,6],[-1,-2,-3]]) 
>>> print '\n'.join(''.join(str(cell) for cell in row) for row in a) 
123 
246 
-1-2-3 

我觉得在这一点上,你可能会是最好关闭实施的东西,并测量需要多长时间。我的猜测是,代码中最慢的部分实际上是打印到控制台,而不是将字符串连接在一起。

+0

嗯,我想这意味着没有“numpy的方式”来做到这一点。无论如何感谢 – 2012-03-22 22:16:48

0
>>> import numpy  
>>> a = numpy.array([[ 1.0, 2, 3], [ 4, 5, 6], [ 7, 8, 9]]) 
>>> print str(a).replace(' ','').replace('.','').replace('[','').replace(']','') 
123 
456 
789 
+0

+1,因为它确实回答了问题我问,但真正有问题的数组使用自定义数据类型,字符串表示可以是任何东西,包括空格和括号。编辑这个问题来反映这个 – 2012-03-22 20:11:20

+0

@Etienne Perot - 回到绘图板! – fraxel 2012-03-22 20:22:01

3
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='') 
+0

你真的需要'.buffer'在'sys.stdout.buffer'吗? – 2017-02-04 23:18:27

0

这很简单,如果a是你的阵列只是这样做:

print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a)))) 
相关问题