如何在NumPy中声明并填充数组?
我需要在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.ones
、np.empty
,或者用np.ones((56, 4)) * np.nan
来创建。
然后,在大多数情况下,如果没有性能方面的考虑,最好不要使用Python的循环。举个例子,这段代码可以实现你的循环:
data[:, 3] = 32