python 2.x print语句:一个print语句产生多行

时间:2015-11-04 09:24:11

标签: python macos python-2.7

import numpy as np

f=open("a.txt","wb")
a=np.zeros((10,36))
for i in range(10):
  for j in range(36):
    a[i][j]=i+j
for b in a:
  print >>f, b

首先,我认为它会在a.txt文件中占用10行,数组中的每一行都是一行。但事实是,文件看起来像这样: a.txt

可以看出,a中的每一行占用文件中的三行。为什么呢?

6 个答案:

答案 0 :(得分:2)

Numpy默认将行长度限制为75。您可以更改默认值 np.set_printoptions(线宽= 1000)

答案 1 :(得分:2)

当您在第二个循环中迭代矩阵时,变量{value.render}仍然是一个numpy对象。当你尝试打印这个numpy对象时,python首先得到它的字符串表示。

Numpy有内置的格式,可以打印这个numpy对象,这就是多行的原因。

答案 2 :(得分:1)

Numpy在输出数据时格式化数据。但是,SciPy doc会向您展示如何使用例如array2string来输出输出:

import numpy as np

a = np.zeros((10, 36))

for i, line in enumerate(a):
  for j, column in enumerate(line):
    a[i][j] = i + j

with open("a.txt","wb") as f:
    f.write(np.array2string(a, max_line_width=1000))

这里,max_line_width为1000,文件的每一行可以是1000个字符宽。

文件:

[[  0.   1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.]
 [  1.   2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.]
 [  2.   3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.]
 [  3.   4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.]
 [  4.   5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.]
 [  5.   6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.  40.]
 [  6.   7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.  40.  41.]
 [  7.   8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.]
 [  8.   9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.  43.]
 [  9.  10.  11.  12.  13.  14.  15.  16.  17.  18.  19.  20.  21.  22.  23.  24.  25.  26.  27.  28.  29.  30.  31.  32.  33.  34.  35.  36.  37.  38.  39.  40.  41.  42.  43.  44.]]

答案 3 :(得分:0)

问题在于,当您在第二个循环中迭代矩阵时,b仍然是numpy对象。当你尝试打印一些对象时,python首先得到它的字符串表示。 Numpy为漂亮打印对象提供了内置格式,实际上这些对象被称为。您可以通过转换到最后一行中的列表来修复它:print >>f, list(b)

答案 4 :(得分:0)

您可以the documentation看到max_line_width的默认值为75.此后numpy会发出\n个字符。由于您使用ndarray打印b,因此使用的是此内容。

要更改此设置,您可以按照已建议的全局设置set_printoptions,或者如果您只希望此效果仅限于在文件中写入,则可以使用np.array_str将循环更改为打印:

for b in a:
  # tweak the line width to what suits you:
  print >>f, np.array_str(c, max_line_width=300)

答案 5 :(得分:0)

也许它会更好地使用numpy函数import numpy as np a = np.zeros((10,36)) for i in range(10): for j in range(36): a[i][j] = i + j np.savetxt("a.txt",a,'%2d',newline="\r\n") 。像这样的东西:

uint32_t

所以它仅在数组的行之后执行换行:)

修改
http://docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html