【问题标题】:python dictionary to numpy array slicingpython字典到numpy数组切片
【发布时间】:2021-04-21 17:32:12
【问题描述】:

我有一本字典。

cars_dict= { 'cars_per_cap': [809, 731, 588, 18, 200, 70, 45], 'country': ['United States','Australia','Japan','India','Russia','Morocco','Egypt'], 'drives_right': [True, False, False, False, True, True, True] }

我把它改成了 NumPy

cars_numpy = np.array(cars_dict)

cars_numpy = array({'cars_per_cap': [809, 731, 588, 18, 200, 70, 45], 'country': ['United States', 'Australia', 'Japan', 'India', 'Russia', 'Morocco', 'Egypt'], 'drives_right': [True, False, False, False, True, True, True]}, dtype=object)

我想做切片并从中得到“美国”

print(cars_numpy[1][0]) 不工作。

我得到的错误是这样的


IndexError                                Traceback (most recent call last)
<ipython-input-121-54a4195f7446> in <module>
----> 1 print(cars_numpy[1][0])

IndexError: too many indices for array

【问题讨论】:

  • 在字典上调用numpy.array 没有意义。你为什么这样做?
  • 我支持这个。为什么你不能print(cars_dict['country'][0])
  • 我想了解如果我将字典传递给 NumPy 然后尝试对其进行切片,NumPy 将如何行动。我仍然不明白为什么它会出错。

标签: python numpy dictionary numpy-slicing


【解决方案1】:

字典不是列表,你不能将它传递给 numpy 并期望得到相同的结果,它没有排序,它使用内部数据结构以提高效率。

你可以做的是:

cars_numpy = np.array(list(cars_dict.values()))

这会将它们放入一个数组中,但您不能保证使用此方法的键之间的顺序,例如country 的行可能在 cars_per_cap 之前。

【讨论】:

    【解决方案2】:

    我有一些建议-

    1. 您需要一个嵌套列表而不是字典来创建一个多维 NumPy 数组。这可以通过list(dictionary.values()) 获得。
    2. 使用np.array(dictionary) 将为您提供一个NumPy 数组,其中包含一个包含字典的条目。因此错误IndexError: too many indices for array 因为您要求一行和一列,但它在arr[0] 只有一个元素
    3. arr[1][0] 是使用 numpy 的一种非常低效的方式。相反,请尝试arr[1,0]
    4. 字典现在按插入顺序排列。 从 Python 3.6 开始,对于 Python 的 CPython 实现,字典会记住插入项的顺序。将它们更改为 numpy 数组(它们的 values())将保留此顺序。

    因此这会起作用 -

    np.array(list(cars_dict.values()))[1,0]
    
    'United States'
    

    【讨论】:

      猜你喜欢
      • 2017-06-03
      • 2020-12-11
      • 2011-08-30
      • 1970-01-01
      • 1970-01-01
      • 2015-07-26
      • 2016-09-13
      • 2014-05-18
      • 1970-01-01
      相关资源
      最近更新 更多