2015-11-04 67 views
0
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蟒蛇2.x的print語句:一個print語句導致多行

可以看出,a中的每一行佔用文件中的三行。爲什麼?

回答

0

您可以通過the documentation對於max_line_width的默認值是75.之後numpy的發出\n字符看。由於您打印ndarrayb這是使用。

要改變這一點,你可以先設定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) 
2

Numpy默認限制行長度爲75。你可以改變默認值 np.set_printoptions(linewidth = 1000)

0

問題是,當你在第二個循環中迭代你的矩陣時,b仍然是numpy對象。當你嘗試打印一些對象時,python首先獲取它的字符串表示。 Numpy內置了格式化漂亮的打印對象,實際上它被調用。您可以通過將在最後一行列出修復:print >>f, list(b)

2

當你在第二個循環中迭代你的矩陣時,變量b仍然是一個numpy對象。當你試圖打印這個numpy對象時,python首先獲取它的字符串表示。

Numpy內置格式化漂亮打印這個numpy對象,這是多行的原因。

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)) 

這裏,將具有1000 MAX_LINE_WIDTH,文件的每行可爲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.]]