NumPy - 加载数组



在 NumPy 中加载数组

NumPy 加载数组指的是将外部文件或来源中的数据读取并加载到 NumPy 数组的过程。

此功能允许您处理存储在文件(如文本文件、二进制文件或其他格式)中的数据,并将这些数据引入 NumPy 环境以进行分析或操作。以下是 NumPy 中加载数组的常用方法:

  • 从文本文件加载:使用 np.loadtxt() 或 np.genfromtxt() 等函数读取文本文件中的数据。
  • 从二进制文件加载:使用 np.fromfile() 函数读取二进制文件中的数据。
  • 从 .npy 文件加载:使用 np.load() 函数读取 NumPy 本机二进制格式(.npy 文件)中保存的文件中的数据。

从文本文件加载数组

在 NumPy 中从文本文件加载数组是将存储在纯文本文件中的数据导入到 NumPy 数组的常见操作。

NumPy 提供了np.loadtxt()函数和np.genfromtxt()函数来处理不同的文本文件格式和结构,从而轻松处理各种类型的基于文本的数据,它们是:

使用 np.loadtxt() 函数

np.loadtxt() 函数用于将文本文件中的数据读取到 NumPy 数组中。

此函数通常用于加载以表格格式组织的结构化数据,例如 CSV 文件或空格分隔的文件。它适用于每个行包含一行数字且所有行具有相同列数的数据文件。以下是语法:

numpy.loadtxt(fname, dtype=<type>, delimiter=<delimiter>, comments=<char>, skiprows=<num>, usecols=<cols>)

其中,

  • fname:要读取的文件名或文件对象。
  • dtype:结果数组的数据类型(默认为浮点数)。
  • delimiter:分隔值的字符串或字符(例如,逗号、空格)。
  • comments:指示注释开始的字符串(例如,#)。
  • skiprows:要跳过的文件开头的行数。
  • usecols:要读取的列的索引(例如,[0, 2] 读取第一列和第三列)。

示例

假设您有一个文本文件“data.txt”,其内容如下:

1 2 3
4 5 6
7 8 9

您可以使用 loadtxt() 函数将此数据加载到 NumPy 数组中,如下所示:

import numpy as np

# Load data from a text file
array_from_text = np.loadtxt('data.txt')

print("Array loaded from text file:")
print(array_from_text)

使用 np.genfromtxt() 函数

np.genfromtxt() 函数用于将文本文件中的数据读取到 NumPy 数组中。它对于处理更复杂的文本文件格式很有用,包括包含缺失值、混合数据类型和不规则结构的文件。以下是语法:

numpy.genfromtxt(fname, dtype=<type>, delimiter=<delimiter>, comments=<char>, skip_header=<num>, usecols=<cols>, filling_values=<value>, missing_values=<value>, converters=<dict>, encoding=<str>, names=<bool>)

其中,

  • fname:要读取的文件名或文件对象。
  • dtype:结果数组的数据类型。如果未指定,则默认为浮点数。
  • delimiter:分隔值的字符串或字符(例如,CSV 使用逗号,空格分隔使用空格)。
  • comments:指示注释开始的字符串(例如,#)。以该字符开头的行将被忽略。
  • skip_header:要跳过的文件开头的行数(用于跳过标题)。
  • usecols:要读取的列的索引。例如,[0, 2] 将只读取第一列和第三列。
  • filling_values:用于缺失数据的数值。可以是标量或将列索引映射到填充值的字典。
  • missing_values:文件中表示缺失数据的数值。可以是标量或数值列表。
  • converters:将列转换为特定格式的函数的字典。
  • encoding:用于读取文件的编码(默认为 None,使用系统默认编码)。
  • names:如果为 True,则假定文件的首行为列名。

示例

在此示例中,我们使用 genfromtxt() 函数将“data.txt”文件加载到 NumPy 数组中:

import numpy as np

# Load data from a text file
array = np.genfromtxt('data.txt')

print("Array loaded from text file:")
print(array)

从二进制文件加载数组

在 NumPy 中从二进制文件加载数组涉及读取以二进制格式存储的数据,与文本格式相比,二进制格式通常更有效地进行存储和检索。

二进制文件包含原始数据,必须根据预期的格式和数据类型正确解释这些数据。NumPy 提供了np.fromfile()函数和np.load()函数来从二进制文件加载数组。

使用 np.fromfile() 函数

np.fromfile() 函数用于将二进制文件中的数据加载到 NumPy 数组中。此函数需要了解二进制文件的数据类型和格式。以下是语法:

numpy.fromfile(file, dtype=<type>, count=-1, offset=0)

其中,

  • file:要读取的文件名或文件对象。
  • dtype:结果数组的数据类型(例如,np.float32、np.int32)。
  • count:要读取的项目数。如果为 -1,则读取所有数据。
  • offset:要跳过的文件开头的字节数。

示例

假设您有一个二进制文件“data.bin”,其中包含“32 位”浮点数据。可以使用以下代码创建该文件:

import numpy as np

# Create a binary file with float data
data = np.array([1.1, 2.2, 3.3], dtype=np.float32)
data.tofile('data.bin')
print ('File created!!')

现在,要读取此二进制文件,请使用以下代码:

import numpy as np

# Load data from a binary file
array = np.fromfile('data.bin', dtype=np.float32)

print("Array loaded from binary file:")
print(array)

以下是上述代码的输出:

Array loaded from binary file:
[1.1 2.2 3.3]

对 .npy 文件使用 np.load() 函数

NumPy 中的 np.load() 函数用于从 NumPy 本机二进制格式.npy.npz文件中的文件加载数组或数据。此格式保留数组的元数据,例如其形状和数据类型。“.npz”格式用于以压缩格式存储多个数组。

以下是语法:

numpy.load(file, mmap_mode=None, allow_pickle=False, fix_imports=True, encoding='ASCII')

其中,

  • file:要读取的文件名或文件对象。这可以是 .npy 文件(用于单个数组)或 .npz 文件(用于多个数组)。
  • mmap_mode:如果非 None,则用于将文件内存映射,这允许读取大型数组而无需将整个文件加载到内存中。有效值为“r”、“r+”、“w+”等。
  • allow_pickle:如果为 True,则允许加载使用 Python 的 pickle 格式保存的对象。使用此选项时要谨慎,因为它可以执行任意代码并构成安全风险。
  • fix_imports:如果为 True,则在加载腌制数据时尝试检测并修复 Python 2 到 Python 3 的兼容性问题。
  • encoding:加载 Python 3 文件时用于解码 Python 2 字符串数据的编码。默认为“ASCII”。

示例:加载 .npy 文件

这里,我们首先将数组保存到“.npy”文件格式:

import numpy as np

# Create a NumPy array
array = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int32)

# Save the array to a .npy file
np.save('data.npy', array)
print ("Saved!!")

现在,我们使用 NumPy 中的 load() 函数从“.npy”文件加载保存的数组:

import numpy as np

# Load the array from the .npy file
array = np.load('data.npy')

print("Array loaded from .npy file:")
print(array)

获得的输出如下所示:

Array loaded from .npy file:
[[1 2 3]
 [4 5 6]]

示例:加载 .npz 文件

“.npz”格式用于将多个数组保存到单个压缩文件中。它创建一个 zip 归档文件,其中每个文件都是“.npy”文件,如以下示例所示:

import numpy as np

# Save multiple arrays to a .npz file
array1 = np.array([1, 2, 3])
array2 = np.array([[4, 5, 6], [7, 8, 9]])
np.savez('data.npz', array1=array1, array2=array2)

# Load the arrays from the .npz file
data = np.load('data.npz')

# Access individual arrays using their keys
array1_loaded = data['array1']
array2_loaded = data['array2']

print("Array 1 loaded from .npz file:")
print(array1_loaded)

print("Array 2 loaded from .npz file:")
print(array2_loaded)

执行上述代码后,我们将获得以下输出:

Array 1 loaded from .npz file:
[1 2 3]
Array 2 loaded from .npz file:
[[4 5 6]
 [7 8 9]]
广告