需求

实际程序中,往往需要将运算结果(ndarray类型)保存到本地,以便进行后续的数据分析。利用numpy.savetxt可以保存1维或2维数据到txt文件中,但无法保存3维以上的数据。比如对一个图像库提取的图像特征。

此时可以用numpy.savez方法来保存3维以上的数据。

接口

保存数据用numpy.savez

  • 可以保存任意多个N维数组,有两种保存方式:
    1.用args方式,比如np.savez('data',d1,d2,d3),它将会以以arr_0,arr_1,arr_2来表示d1,d2,d3的名字,用于访问数据时用。
    2.用*
    kwds方式,比如np.savez('data',d1=d1,d2=d2,d3=d3),即指定了数组名,用于访问数据时用。
  • 保存后的本地文件为npz格式。

需要载入数据时用np.load(file)方法

  • 载入后的对象为NpzFile对象,类似一个字典。可以通过NpzFile.files来查看该文件中,有哪些数据。进而再通过类似字典索引的方式来访问数据,详情见实例。
  1. Signature: np.savez(file, *args, **kwds)
  2. Docstring:
  3. Save several arrays into a single file in uncompressed ``.npz`` format.
  4. If arguments are passed in with no keywords, the corresponding variable
  5. names, in the ``.npz`` file, are 'arr_0', 'arr_1', etc. If keyword
  6. arguments are given, the corresponding variable names, in the ``.npz``
  7. file will match the keyword names.
  8. Parameters
  9. ----------
  10. file : str or file
  11. Either the file name (string) or an open file (file-like object)
  12. where the data will be saved. If file is a string or a Path, the
  13. ``.npz`` extension will be appended to the file name if it is not
  14. already there.
  15. args : Arguments, optional
  16. Arrays to save to the file. Since it is not possible for Python to
  17. know the names of the arrays outside `savez`, the arrays will be saved
  18. with names "arr_0", "arr_1", and so on. These arguments can be any
  19. expression.
  20. kwds : Keyword arguments, optional
  21. Arrays to save to the file. Arrays will be saved in the file with the
  22. keyword names.

实例

实例1:用*args方式保存数据

  1. In [48]: d1 = np.random.randint(0,100,(2,2,2))
  2. In [49]: d1
  3. Out[49]:
  4. array([[[12, 72],
  5. [60, 41]],
  6. [[ 2, 6],
  7. [62, 53]]])
  8. In [50]: d2, d3 = d1*10, d1*100
  9. In [51]: np.savez('data',d1,d2,d3)
  10. In [52]: data = np.load('data.npz')
  11. In [53]: data.files
  12. Out[53]: ['arr_0', 'arr_1', 'arr_2']
  13. In [54]: data['arr_0']
  14. Out[54]:
  15. array([[[12, 72],
  16. [60, 41]],
  17. [[ 2, 6],
  18. [62, 53]]])
  19. In [55]: data['arr_1']
  20. Out[55]:
  21. array([[[120, 720],
  22. [600, 410]],
  23. [[ 20, 60],
  24. [620, 530]]])
  25. In [56]: data['arr_2']
  26. Out[56]:
  27. array([[[1200, 7200],
  28. [6000, 4100]],
  29. [[ 200, 600],
  30. [6200, 5300]]])

实例2:用**kwds方式保存数据

  1. In [57]: np.savez('data2',d1=d1,d2=d2,d3=d3) # 等价于
  2. # d = {'d1':d1,'d2':d2,'d3':d3}
  3. # np.savez('data2',**d)
  4. In [58]: data2 = np.load('data2.npz')
  5. In [59]: data2.files
  6. Out[59]: ['d1', 'd2', 'd3']
  7. In [62]: data2['d1']
  8. Out[62]:
  9. array([[[12, 72],
  10. [60, 41]],
  11. [[ 2, 6],
  12. [62, 53]]])
  13. In [63]: data2['d2']
  14. Out[63]:
  15. array([[[120, 720],
  16. [600, 410]],
  17. [[ 20, 60],
  18. [620, 530]]])
  19. In [64]: data2['d3']
  20. Out[64]:
  21. array([[[1200, 7200],
  22. [6000, 4100]],
  23. [[ 200, 600],
  24. [6200, 5300]]])