如何在没有任何额外符号(方括号 [ ] 和元素之间的空格)的情况下打印 Numpy 数组?

问题描述 投票:0回答:5

我有一个二维 numpy 数组,如下所示:

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

我想在打印时不使用任何通常随数组附带的默认符号;即

[
]
以及元素之间的空间。像这样的东西:

abc
def
ghi

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

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

Edit:数组中的元素具有字符串表示形式,可以是任何内容,包括

[
]
和空格。如何构建此类数组的最小示例:

class custom(object):
    def __repr__(self):
        return 'a'
a = numpy.empty((5, 5), custom)
a.fill(custom())
print a
python arrays formatting numpy
5个回答
10
投票

虽然这几乎相当于一个循环,但我认为这可能是您能得到的最好的结果。一般来说,

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

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


8
投票
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='')

1
投票
>>> 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
投票

这非常简单,如果

a
是你的数组,只需执行以下操作:

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

0
投票

n, m = map(int, input().split()) 一个=[] 对于范围 (n) 内的 i: a.append(列表(map(int, input().split()))) 对于范围 (1, n) 内的 i: 对于范围 (1, m) 内的 j: a[i][j] = a[i - 1][j] + a[i][j - 1] 对于我来说: 打印(*i)

© www.soinside.com 2019 - 2024. All rights reserved.