如何生成2d numpy数组?

14

我试图使用生成器生成一个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 或其他什么吗? - ljetibo
f(a)g(b)到底是做什么的?如果它们产生数字,你的代码应该能正常工作:这是初始化一个二维numpy数组的正确方式(numpy通常足够智能,可以将一个数组的数组转换为ndarray)。 - Marijn van Vliet
data['Name']是什么样的?最好给我们一些可以插入和运行的示例。np._names的形状是什么?我在你的代码中没有看到任何生成器,只有列表推导式。 - hpaulj
3个回答

17

这个有效:

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

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

参见


2

很简单,就像这样做

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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接