我有一个二维 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
虽然这几乎相当于一个循环,但我认为这可能是您能得到的最好的结果。一般来说,
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
我认为在这一点上你可能最好实施一些东西并衡量它需要多长时间。我的猜测是,代码中最慢的部分实际上将打印到控制台,而不是将字符串连接在一起。
np.savetxt(sys.stdout.buffer, a, fmt='%s', delimiter='')
>>> 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
这非常简单,如果
a
是你的数组,只需执行以下操作:
print(re.sub('[ ]+', ' ', re.sub(' *[\\[\\]] *', '', np.array_str(a))))
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)