【问题标题】:Concatenate 5 unpickle dictionaries without overwriting (data is from CIFAR-10)连接 5 个 unpickle 字典而不覆盖(数据来自 CIFAR-10)
【发布时间】:2019-04-05 00:26:29
【问题描述】:
def unpickle(file):
import pickle
with open(file, 'rb') as fo:
    dict = pickle.load(fo, encoding='bytes')
return dict

dict1 = unpickle(data_dir1)
dict2 = unpickle(data_dir2)
dict3 = unpickle(data_dir3)
dict4 = unpickle(data_dir4)
dict5 = unpickle(data_dir5)

数据格式(来自 CIFAR-10):

以这种方式加载,每个批处理文件都包含一个包含以下元素的字典:

data -- 一个 10000x3072 的 numpy uint8 数组。数组的每一行存储一个 32x32 彩色图像。前 1024 个条目包含红色通道值,接下来的 1024 个为绿色,最后的 1024 个为蓝色。图像以行优先顺序存储,因此数组的前 32 个条目是图像第一行的红色通道值。

我的目标是将存储在字典中的所有 numpy 数组放在一起,作为一大组 numpy 数组(不覆盖)。

【问题讨论】:

  • “覆盖”是什么意思?更改字典中的数组,还是将数据复制到新的大数组中?
  • 我的意思是如果两个值相同,一个不应该替换另一个。我只想将数据复制到一个大数组中
  • np.concatenate 加入 numpy 数组。所以是的,如果尺寸匹配,您可以加入每个字典中的数组。如果你对 numpy 和数组形状有一些基本的了解,这没什么神秘的。但我还是不知道你想要什么。 group of numpy arrays 是模糊的描述。 “两个值相同”同样含糊不清。
  • np.concatenate 返回错误。 ValueError:无法连接零维数组查看此链接以查看数据的来源:cs.toronto.edu/~kriz/cifar.htm
  • 那是因为您试图连接字典,而不是其中包含的数组!

标签: python numpy


【解决方案1】:

np.concatenate((dict1, dict2, dict3, dict4, dict5), axis=0) 应该可以工作

【讨论】:

  • 它给了我一个错误:ValueError: zero-dimensional arrays cannot be concatenated
  • type(dict1) 返回什么?还有 dict1.shape?
  • ------------------------------------ --------------------------------------- AttributeError Traceback(最近一次调用最后一次) in () 19 20 print(type(dict1)) ---> 21 print(dict1.shape) 22 23 AttributeError: 'dict' object has no attribute 'shape'
  • 我认为你的回答提到它是一个 numpy 数组。它是如何存储在字典中的?
  • (cs.toronto.edu/~kriz/cifar.html ) 这是数据结构的链接
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-22
相关资源
最近更新 更多