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中的每一行占用文件中的三行。为什么呢?
答案 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