【问题标题】:How to reshape an array in NumPy?如何在 NumPy 中重塑数组?
【发布时间】:2017-01-07 12:55:06
【问题描述】:

我有一个 numpy 数组:array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object),女巫形状是 (39104L,)。如何将其重塑为数组,如array([59, 72, 117, ..., 15530, 13091, 983], dtype=float32

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    我怀疑您的原始数组是一维列表数组:

    array([[59], [72], [117], ..., [15530], [13091], [983]], dtype=object)
    # shape (39104L,)
    

    通常类似的东西是整数中的二维数组

    In [796]: x=np.array([[59], [72], [117], [15530], [13091], [983]])
    In [797]: x
    Out[797]: 
    array([[   59],
           [   72],
           [  117],
           [15530],
           [13091],
           [  983]])
    In [798]: x.shape
    Out[798]: (6, 1)
    

    但如果其中一个或多个列表具有不同数量的元素,您将获得对象数组:

    In [799]: x=np.array([[59], [72], [117], [15530,34], [13091], [983]])
    In [800]: x
    Out[800]: array([[59], [72], [117], [15530, 34], [13091], [983]], dtype=object)
    In [801]: x.shape
    Out[801]: (6,)
    

    这会导致以下错误:

    In [804]: np.asarray(x, dtype=float)
    ValueError: setting an array element with a sequence.
    

    但是

    In [805]: x.tolist()
    Out[805]: [[59], [72], [117], [15530, 34], [13091], [983]]
    

    试试这样的方法,看看你的数组中是否有任何元素长于 1:

    In [806]: max([len(i) for i in x])
    Out[806]: 2
    

    您可能还需要显示一个或多个元素的类型以确认我的怀疑:

    In [807]: type(x[0])
    Out[807]: list
    

    另外,这个数组是怎么构造的?

    【讨论】:

      【解决方案2】:

      如果形状是 (n_items,) 那么它已经是一个一维向量。如果你想从中得到一个“普通”的 Python 列表,请使用numpy.ndarray.tolist()

      对于一般的重塑,有numpy.reshape() 方法。

      【讨论】:

      • 返回错误:AttributeError: 'list' object has no attribute 'tolist'
      • 如果你的numpy数组被称为my_arraytype(my_array)的输出是什么?
      【解决方案3】:

      正如您所写,您的数组应该具有(39104L,1) 的形状,而不是(39104L,)。也就是说,该数组具有冗余维度。您可以使用np.squeeze 删除它。

      对于一般的整形,您当然可以使用np.reshape,在您的情况下也可以使用它来代替np.squeeze

      您问题的另一个方面是您更改了数组的dtype。为此,您可以使用

      a = np.asarray(a, dtype='float32')
      

      a 是你的数组。

      【讨论】:

      • 我成功了,但它输出错误:ValueError: setting an array element with a sequence.
      • 您应该编辑您的问题并发布完整的代码示例。由于缺少详细信息,您现在无法看到一些错误。
      猜你喜欢
      • 2019-05-05
      • 2013-01-06
      • 2017-11-11
      • 1970-01-01
      • 1970-01-01
      • 2019-08-25
      • 2016-02-10
      • 1970-01-01
      • 2020-04-04
      相关资源
      最近更新 更多