【问题标题】:how to split a dictionary with ndarray as value for keys如何用数组拆分字典作为键的值
【发布时间】:2020-08-29 11:31:41
【问题描述】:

我有一个包含 10 个值的字典,键为 1-10,每个键的值是维度 (126,1024) 的 ndarray。我想将此字典拆分为大小为 5 的块,因此结果将是两个大小为 5 的字典。我的代码如下:


pp=0
def chunks(data, SIZE=2):
    it = iter(data)
    for i in range(0, len(data), SIZE):
        yield {(i,k) for (i,k) in islice(it, SIZE)}

for item in chunks({(i,np.array(k)) for (i,k) in data_dic.items()}, 5):
    pp=pp+1
    dump_dic(item,pp)
    #print(item)

这段代码给了我一个 unhashable type: 'numpy.ndarray' 错误: for item in chunks({(i,np.array(k)) for (i,k) in data_dic.items()}, 5):

谁能建议我如何用 ndarray 数据拆分这本字典?

【问题讨论】:

    标签: python dictionary multidimensional-array numpy-ndarray


    【解决方案1】:

    试试这个

    dic = {1:np.zeros((20,20)), 2:np.zeros((20,20)), 3:np.zeros((20,20)), 4:np.zeros((20,20)), 5:np.zeros((20,20)), 6:np.zeros((20,20)), 7:np.zeros((20,20)), 8:np.zeros((20,20)), 9:np.zeros((20,20)), 10:np.zeros((20,20))}    
    import math
    num = 3 #number of dictionaries, in your question you said 2(5, 5),i added 3 dic (3, 3, 4) 
    arr = []
    for i in range(num):
        if i == num -1:
           arr.append(math.ceil(len(dic) / 3))
        else:        
           arr.append(math.floor(len(dic) / 3))
    
    
    dic_list = []
    m = 0
    for i in arr:
       k = 1
       temp = {}
       for j in list(dic.values())[m:m+i]:
          temp[k] = j
          k += 1    
       dic_list.append(temp)    
       m = i  
    
    # So you end up with array  of dictionaries. with 3, 3, 4 data
    

    示例: 输入

    {1:np.array(), 2:np.array(), 3:np.array(), 4:np.array(), 5:np.array(), 6:np.array(), 7:np.array(), 8:np.array(), 9:np.array(), 10:np.array()}
    

    输出

      [{1:np.array(), 2:np.array(), 3:np.array()}, {4:np.array(), 5:np.array(), 6:np.array()}, {7:np.array(), 8:np.array(), 9:np.array(), 10:np.array()}]
    

    【讨论】:

    • 我没有完全理解你的问题。但希望这对你有帮助:)
    • 实际字典大小大于10,000,我只是发布了10个键值的问题。
    • 我的问题实际上是如何拆分字典值的 ndarray 数据以放入几个较小的字典中。
    猜你喜欢
    • 2021-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-15
    • 2019-03-29
    • 1970-01-01
    • 2017-04-25
    相关资源
    最近更新 更多