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

4

我需要在Python中创建一个空数组,并使用循环方法填充它。

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

这是我的代码。其中的ra和dec部分来自我导入的另一个数组。我遇到的问题是如何填充其他列。例如,如果要填充第三列,可以这样做:

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

我遇到的错误是:

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

此外,当我检查我创建的数组的形状时,它将显示为(3,)。我已经输入到其中的数据意图是两列和56行数据。
那么我在哪里搞错了?我应该转置数组吗?
5个回答

6
你可以这样做:
data1 = np.zeros((56,4))

要获得一个56x4的数组。如果您不想以0开头,则可以使用np.onesnp.emptynp.ones((56, 4)) * np.nan

然后,在大多数情况下,出于性能原因,最好不要使用Python循环。所以,例如,这将完成您的循环:

data[:, 3] = 32

我需要为每个元素输入一个唯一的值。我能否使用类似 data1[2,3] = 32 的方式输入该值? - handroski
如果应该输入的内容是一个可迭代对象I,你可以简单地使用data1[:, 3] = I - deinonychusaur

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

提供了一个单行解决方案来解决您的问题;但是为了效率,最好先分配一个空数组,然后再复制相关部分,这样可以避免构造虚拟列表。

2

有一件事情没有人提到,那就是在Python中,索引从0开始,而不是1。

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

祝好运!


0

假设ra和dec是向量(1-d):

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

-1

嘿,大家好,如果您想用相同的数字填充数组,只需执行以下操作:

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

例如,要生成1000个数字为2的数组。


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