【问题标题】:Is a set converted to numpy array?一个集合是否转换为 numpy 数组?
【发布时间】:2020-04-23 18:13:25
【问题描述】:

我正在使用以下方法创建一个 ndarray:

import numpy as np

arr=np.array({1,2})
print(arr, type(arr))

哪个输出

{1, 2} <class 'numpy.ndarray'>

如果它的类型是numpy.ndarray,那么o/p必须像[1,2]这样的方括号? 谢谢

【问题讨论】:

    标签: python numpy multidimensional-array


    【解决方案1】:

    是的,但这是因为您在函数 np.array 上放置了一个集合而不是列表 如果你试试这个:

    import numpy as np
    
    arr=np.array([1,2]) 
    print(arr, type(arr))
    

    你得到:

    [1 2] <class 'numpy.ndarray'>
    

    【讨论】:

      【解决方案2】:

      这与您想象的略有不同。您实际上是在构建一个object 类型的数组,而不是使用您指定的数据(数字 1 和 2)构建一个数组。见下文:

      >>> np.array({1, 2)).dtype
      dtype('O')
      

      这是因为集合不是“类数组”,在 NumPy 的术语中,特别是它们不是有序的。因此,数组构造不是用集合的内容构建一个数组,而是将集合本身​​作为一个对象。

      如果您真的想从集合的内容构建一个数组,您可以执行以下操作:

      >>> x = np.fromiter(iter({1, 2}), dtype=int)
      >>> x.dtype
      dtype('int64')
      

      编辑:This answer 有助于解释如何使用各种类型在 NumPy 中构建数组。

      【讨论】:

        【解决方案3】:

        它返回一个没有维度的 numpy 数组对象。集合是一个对象。它类似于传递numpy.array 一个数字(不带括号)。看看这里的区别:

        arr=np.array([1]) 
        arr.shape: (1,)
        
        
        arr=np.array(1) 
        arr.shape: ()
        
        arr=np.array({1,2}) 
        arr.shape: ()
        

        因此,它将您的整个集合视为一个对象,并创建一个没有维度的 numpy 数组,该数组仅返回集合对象。集合不是array-like 并且没有顺序,因此根据numpy array doc 它们不会像您期望的那样转换为数组。如果你想从一个集合中创建一个 numpy 数组并且你不关心它的顺序,使用:

        arr=np.fromiter({1,2},int)
        arr.shape: (2,)
        

        【讨论】:

          【解决方案4】:

          ipythonrepr 显示可能会更清楚:

          In [162]: arr=np.array({1,2})                                                                          
          In [163]: arr                                                                                          
          Out[163]: array({1, 2}, dtype=object)
          

          arr 是 0d 数组,对象 dtype,包含 1 项,集合。

          但是如果我们先把集合变成一个列表:

          In [164]: arr=np.array(list({1,2}))                                                                    
          In [165]: arr                                                                                          
          Out[165]: array([1, 2])
          

          现在我们有一个 1d (2,) 整数 dtype 数组。

          np.array(...) 将列表(和类似列表)参数转换为多维数组。 set 不够 list-like

          【讨论】:

            猜你喜欢
            • 2011-05-19
            • 2012-11-20
            • 1970-01-01
            • 2018-08-15
            • 1970-01-01
            • 2017-10-28
            • 1970-01-01
            • 1970-01-01
            • 2021-11-29
            相关资源
            最近更新 更多