【问题标题】:How to initialise a Numpy array of numpy arrays如何初始化一个numpy数组的numpy数组
【发布时间】:2014-06-28 13:33:17
【问题描述】:

我有一个尺寸为4x4numpy array D

我想要一个基于用户定义值 v 的新 numpy 数组

如果v=2,新的numpy数组应该是[D D]。 如果v=3,新的numpy数组应该是[D D D]

我如何初始化像numpy.zeros(v) 这样的 numpy 数组不允许我将数组作为元素放置?

【问题讨论】:

  • 您希望新阵列是 2D 还是 3D?不太清楚[D D] 应该是什么意思。

标签: python python-2.7 python-3.x numpy scipy


【解决方案1】:

你可以这样做:

import numpy as np
v = 3
x = np.array([np.zeros((4,4)) for _ in range(v)])

>>> print x
[[[ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]]

 [[ 0.  0.  0.  0.]
  [ 0.  0.  0.  0.]
  [ 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】:

    给你,看看这是否适合你。

    import numpy as np
    v = raw_input('Enter: ')
    

    从用户输入初始化 numpy 数组数组(显然可以是您想要的任何形状):

    b = np.zeros(shape=(int(v),int(v)))
    

    我知道这不是初始化一个 numpy 数组,但是既然你提到想要一个 [D D] 数组,如果 v 是 2,我只是想我也会把它作为另一个选项。

    new_array = []
    for x in range(0, int(v)):
        new_array.append(D)
    

    【讨论】:

    • 附加到 numpy 数组非常慢,您通常应该尽量避免这样做
    • 这就是为什么它不是我的第一个答案,只是一个替代方案。
    • 对不起,我应该更仔细地阅读 - 我刚刚意识到您实际上并没有创建一个 numpy 数组,而是一个 list numpy 数组。然后,您必须使用np.concatenatenp.vstacknp.hstack 等将列表转换为 numpy 数组。无论哪种方式,使用np.tilenp.repeat 一次调用就可以更有效。
    【解决方案3】:

    如果我理解正确,您想获取一个二维数组并在第一维中将其平铺v 次?你可以使用np.repeat:

    # a 2D array
    D = np.arange(4).reshape(2, 2)
    
    print D
    # [[0 1]
    #  [2 3]]
    
    # tile it 3 times in the first dimension
    x = np.repeat(D[None, :], 3, axis=0)
    
    print x.shape
    # (3, 2, 2)
    
    print x
    # [[[0 1]
    #   [2 3]]
    
    #  [[0 1]
    #   [2 3]]
    
    #  [[0 1]
    #   [2 3]]]
    

    如果您希望输出保持二维,即(6, 2),您可以省略[None, :] 索引(有关numpy 广播规则的更多信息,请参阅this page)。

    print np.repeat(D, 3, axis=0)
    # [[0 1]
    #  [0 1]
    #  [0 1]
    #  [2 3]
    #  [2 3]
    #  [2 3]]
    

    另一种选择是np.tile,它的行为略有不同,因为它总是平铺在最后一个维度上:

    print np.tile(D, 3)
    # [[0, 1, 0, 1, 0, 1],
    #  [2, 3, 2, 3, 2, 3]])
    

    【讨论】:

    • 这正是我想要的
    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2015-08-05
    • 2018-12-04
    • 1970-01-01
    • 1970-01-01
    • 2020-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多