【问题标题】:4 dimensional array of zeros in pythonpython中的4维零数组
【发布时间】:2015-04-28 13:48:19
【问题描述】:

我想在 python 中创建一个 4 维零数组。 我知道如何对方形数组执行此操作,但我希望列表具有不同的长度。

现在我用这个:

numpy.zeros((200,)*4)

这给了他们所有的长度 200 但我想有长度 200,20,100,20 因为现在我的数组中有很多我不使用的零

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你可以使用np.full:

    >>> np.full((200,20,10,20), 0)
    

    numpy.full

    返回一个给定形状和类型的新数组,用 fill_value 填充。

    例子:

    >>> np.full((1,3,2,4), 0)
    array([[[[ 0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.]],
    
            [[ 0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.]],
    
            [[ 0.,  0.,  0.,  0.],
             [ 0.,  0.,  0.,  0.]]]])
    

    【讨论】:

      【解决方案2】:

      您可以将多个 arg 传递给 shape:

      shape : 整数或整数序列 新数组的形状,例如 (2, 3) 或 2。

      In [26]: arr = np.zeros((200, 20, 10, 20))
      
      In [27]: arr.shape
      Out[27]: (200, 20, 10, 20)
      

      当你有大尺寸时,它似乎也更有效率:

      In [43]: timeit arr = np.full((200, 100, 100, 100),0)
      1 loops, best of 3: 232 ms per loop
      
      In [44]: timeit arr = np.zeros((200, 100, 100, 100))
      100000 loops, best of 3: 12.6 µs per loop
      In [45]: timeit arr = np.zeros((500, 100, 100, 100))
      100000 loops, best of 3: 13.5 µs per loop    
      In [46]: timeit arr = np.full((500, 100, 100, 100),0)
      1 loops, best of 3: 1.19 s per loop
      

      【讨论】:

      • 我不知道你可以将 args 传递给 shape。很高兴知道。
      【解决方案3】:

      从 Python v. 3.50 开始,使用 np.full 命令返回

      FutureWarning: in the future, full((1, 3, 2, 4), 0) will return an array of dtype('int32').

      基于此,我将插入@Padriac 的答案。不过,两者现在都可以使用!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多