如何在NumPy中声明并填充数组?

4 投票
5 回答
57010 浏览
提问于 2025-04-18 15:22

我需要在Python中创建一个空数组,并通过循环来填充它。

data1 = np.array([ra, dec, []])

这是我现在的代码。ra和dec是我从另一个数组导入的部分。我现在遇到的问题是如何填充其他列。

举个例子,假设我想填充第三列,我这样做:

for i in range (0,56):
    data1[i,3] = 32

我遇到的错误是:

IndexError: 在上面提到的代码示例中,第二行的索引无效。

另外,当我检查我创建的数组的形状时,它显示为(3,)。我已经输入的数据本来是打算有两列和56行的。

那么我到底哪里出错了呢?我需要转置这个数组吗?

5 个回答

-1

嘿,大家好,如果你想让一个数组里填满同样的数字,可以这样做:

x_2 = np.ones((1000)) + 1

这个例子是生成1000个数字2。

0

假设 ra 和 dec 是一维的向量:

data1 = np.concatenate([ra[:, None], dec[:, None], np.zeros((len(ra), 1))+32], axis=1)

Or 

data1 = np.empty((len(ra), 3))
data[:, 0] = ra
data[:, 1] = dec
data[:, 2] = 32
2

有一点大家都没提到,那就是在Python中,索引是从0开始的,而不是从1开始。

这意味着,如果你想查看数组的第三列,实际上应该用[:,2]来表示,而不是[:,3]

祝你好运!

3
data1 = np.array([ra,dec,[32]*len(ra)])

这个方法可以用一行代码解决你的问题;不过为了提高效率,先分配一个空数组,然后再把需要的部分复制进去会更好,这样就可以避免创建一个多余的列表。

6

你可以这样做:

data1 = np.zeros((56,4))

这样可以得到一个56行4列的数组。如果你不想让数组从0开始,你可以使用np.onesnp.empty,或者用np.ones((56, 4)) * np.nan来创建。

然后,在大多数情况下,如果没有性能方面的考虑,最好不要使用Python的循环。举个例子,这段代码可以实现你的循环:

data[:, 3] = 32

撰写回答