【问题标题】:How to generate 2d numpy array?如何生成二维 numpy 数组?
【发布时间】:2015-04-22 02:52:30
【问题描述】:

我正在尝试在生成器的帮助下生成一个 2d numpy 数组:

x = [[f(a) for a in g(b)] for b in c]

如果我尝试做这样的事情:

x = np.array([np.array([f(a) for a in g(b)]) for b in c])

正如预期的那样,我得到了一个 np.array 的 np.array。但我想要的不是这个,而是 ndarray,所以我可以通过以下方式获取例如列:

y = x[:, 1]

所以,我很好奇是否有办法以这种方式生成它。

当然,可以创建所需大小的 npdarray 并用所需值填充它,但我想要一种方法来在一行代码中做到这一点。

【问题讨论】:

  • 而且它必须是生成器表达式?不能是np.shape 或类似的吗?
  • f(a)g(b) 到底是做什么的?如果它们产生数字,您的代码应该可以工作:这是初始化 2d numpy 数组的正确方法(numpy 通常足够聪明,可以将数组的数组转换为 ndarray)
  • data['Name'] 是什么样的?最好给我们提供可以即插即用的示例。 np._names的形状是什么?我在您的代码中没有看到任何生成器,只是列出了理解。

标签: python numpy generator


【解决方案1】:

这行得通:

a = [[1, 2, 3], [4, 5, 6]]
nd_a = np.array(a)

所以这也应该有效:

nd_a = np.array([[x for x in y] for y in a])

【讨论】:

    【解决方案2】:

    要创建一个新数组,似乎numpy.zeros 是要走的路

    import numpy as np
    a = np.zeros(shape=(x, y))
    

    您还可以设置数据类型以合理分配它

    >>> np.zeros(shape=(5,2), dtype=np.uint8)
    array([[0, 0],
           [0, 0],
           [0, 0],
           [0, 0],
           [0, 0]], dtype=uint8)
    >>> np.zeros(shape=(5,2), dtype="datetime64[ns]")
    array([['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000000'],
           ['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000000'],
           ['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000000'],
           ['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000000'],
           ['1970-01-01T00:00:00.000000000', '1970-01-01T00:00:00.000000000']],
          dtype='datetime64[ns]')
    

    另见

    【讨论】:

      【解决方案3】:

      很简单,就这样吧

      import numpy as np
      
      arr=np.arange(50)
      arr_2d=arr.reshape(10,5)    #Reshapes 1d array in to 2d, containing 10 rows and 5 columns.
      print(arr_2d)
      

      【讨论】:

        猜你喜欢
        • 2017-09-16
        • 1970-01-01
        • 1970-01-01
        • 2012-05-25
        • 2019-07-28
        • 1970-01-01
        • 1970-01-01
        • 2023-02-03
        • 2011-12-04
        相关资源
        最近更新 更多