如何生成2d numpy数组?

时间:2015-02-20 12:14:56

标签: python numpy generator

我试图在生成器的帮助下生成一个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并填充所需的值,但我想在一行代码中这样做。

2 个答案:

答案 0 :(得分:6)

这有效:

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])

答案 1 :(得分:0)

要创建一个新数组,似乎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]')

另请参见