首页 > 解决方案 > 将多个 numpy 数组存储到 .npy 文件中,同时保留数组顺序

问题描述

在 Tensorflow 的消费 numpy 数组文档中,它显示了以下代码:

# Load the training data into two NumPy arrays, for example using `np.load()`.
with np.load("/var/data/training_data.npy") as data:
  features = data["features"]
  labels = data["labels"]

# Assume that each row of `features` corresponds to the same row as `labels`.
assert features.shape[0] == labels.shape[0]

dataset = tf.data.Dataset.from_tensor_slices((features, labels))

显然,training_data.npy由两个数组组成:特征和标签。所以现在假设我有两个 numpy 数组featureslabels它们具有相同的第 0 维,并且以这样的方式排序,使得每个对应的feature并且label具有完全相同的索引。如何将它们保存在一个.npy文件中,我可以使用一个简单的键(就像上面显示的代码)从中访问数组,同时必须保留数组顺序?

标签: pythonnumpy

解决方案


with np.load("/var/data/training_data.npy") as data:
  features = data["features"]
  labels = data["labels"]

在此代码data中像字典一样被索引。但npy文件中存储的内容的详细信息尚不清楚。它可能是

  • np.savez(通常标记为 a npz)创建的 zip 存档,features并且labels是从其各自存档文件加载的数组。

  • 它可以是一个结构化数组,有两个字段,“特征”和“标签”。在这种情况下data.shapedata.dtype会很有用。

  • 我还想说它可以是一个真正的字典,有两个键和值。但是np.save会把它放在一个 1 元素对象 dtype 数组中,需要访问data.item()['features']等。

所以更多地了解datanpy归档会很好。

保存数组具有相同的两个选项 -savez创建一个 zip 存档,或创建一个结构化数组,然后保存 - 实际上np.save(data)

维护两个数组的顺序和索引很容易——顺序是正常的。只要您以相同的方式对它们进行切片、索引和/或洗牌,两个数组之间的元素配对就会保持不变。


推荐阅读