【问题标题】:Create multidimensional numpy array from specific keys of dictionary从字典的特定键创建多维 numpy 数组
【发布时间】:2017-10-30 15:32:53
【问题描述】:

我有这样的字典:

a = dict(zip( ['k1', 'k2', 'k3', 'k4'], 
          ... [ [1,2,3,4], [10,20,30,40], [100,200,300,400], [1000,2000,3000,4000]])

>>> a
{'k1': [1, 2, 3, 4], 'k2': [10, 20, 30, 40], 'k3': [100, 200, 300, 400], 'k4': [1000, 2000, 3000, 4000]}

我想要做的:获取多个键的值并从中创建多维 numpy 数组。像这样的:

result = numpy.array( [a[x] for x in ('k1' , 'k3')]

我试过这段代码:

ar = numpy.array([])
for el in ['k1', 'k3']:
     ar = numpy.r_[ar, num_dict[el]]
ar = ar.reshape(2,len(ar)/2)

但是有一些内置函数或更优雅的方式吗?

【问题讨论】:

  • 我认为你的第一个选项已经很优雅了。

标签: python arrays numpy dictionary vectorization


【解决方案1】:

列表列表是np.array 的正常输入,因此您的列表理解是有意义的。

In [382]: [a[x] for x in ['k1','k3']]
Out[382]: [[1, 2, 3, 4], [100, 200, 300, 400]]

或者对于整个字典

In [385]: np.array(list(a.values()))    # list required in py3
Out[385]: 
array([[1000, 2000, 3000, 4000],
       [   1,    2,    3,    4],
       [  10,   20,   30,   40],
       [ 100,  200,  300,  400]])

通常字典项目是在理解中一一选择的。 operator 有一个方便的类,用于一次调用获取多个键(我认为它在速度上没有太大区别):

In [386]: import operator
In [387]: operator.itemgetter('k1','k3')(a)
Out[387]: ([1, 2, 3, 4], [100, 200, 300, 400])

我认为r_ 的迭代不是一个好的选择。 r_ 只是 concatenate 的封面。如果必须迭代,重复concatante 会更慢。最好建立一个列表,并在最后制作数组(如列表推导式)。

【讨论】:

  • 感谢您的回答! itemgetter 很棒的功能,我已经想用了!
【解决方案2】:

我只需要一个来自数据的 numpy 数组,所以我找不到没有循环的方法。 我创建函数:

def loadFromDict( fieldnames, dictionary ):
    ''' fieldnames - list of needed keys, dictionary - dict for extraction
     result - numpy.array size of (number of keys, lengths of columns in dict)'''
    ar = numpy.zeros( (len(fieldnames), len(dictionary[fieldnames[0]])) )
    for c,v in enumerate(fieldnames,0):
        ar[c,:] = dictionary[v]
    return ar

在我的情况下,字典的所有列长度都相同。无论如何,很容易实现它们不同:使用[len(v) for v in dictionary.values()] 获取所有长度,或查找当前键的长度。

【讨论】:

    猜你喜欢
    • 2013-11-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    • 2020-04-03
    • 2016-03-18
    • 1970-01-01
    • 2017-06-24
    相关资源
    最近更新 更多