初始化numpy数组

2024-04-25 21:59:03 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有方法初始化形状的numpy数组并将其添加到其中?我将用一个列表示例来解释我需要什么。如果要创建循环中生成的对象列表,可以执行以下操作:

a = []
for i in range(5):
    a.append(i)

我想用numpy数组做一些类似的事情。我知道vstack、concatenate等。但是,似乎需要两个numpy数组作为输入。我需要的是:

big_array # Initially empty. This is where I don't know what to specify
for i in range(5):
    array i of shape = (2,4) created.
    add to big_array

big_array应该有一个形状(10,4)。怎么做?


编辑:

我想补充以下澄清。我知道我可以定义big_array = numpy.zeros((10,4)),然后填充它。但是,这需要预先指定大数组的大小。我知道这个箱子的尺寸,但如果我不知道呢?当我们在python中使用.append函数扩展列表时,我们不需要提前知道它的最终大小。我想知道是否有类似的东西可以从较小的数组创建较大的数组,从一个空数组开始。


Tags: to对象方法innumpy示例列表for
2条回答

numpy.zeros

Return a new array of given shape and type, filled with zeros.

或者

numpy.ones

Return a new array of given shape and type, filled with ones.

或者

numpy.empty

Return a new array of given shape and type, without initializing entries.


然而,在numpy中,我们通过将元素附加到列表来构造数组的思想并没有得到很好的应用,因为它的效率较低(numpy数据类型更接近底层C数组)。相反,应该将数组预先分配到所需的大小,然后填充行。不过,如果必须的话,可以使用numpy.append

我通常的做法是创建一个常规列表,然后将我的内容附加到其中,最后将列表转换为一个numpy数组,如下所示:

import numpy as np
big_array = [] #  empty regular list
for i in range(5):
    arr = i*np.ones((2,4)) # for instance
    big_array.append(arr)
big_np_array = np.array(big_array)  # transformed to a numpy array

当然,在创建步骤中,最终对象占用的内存空间是原来的两倍,但追加到python列表中的速度非常快,而且还可以使用np.array()创建。

相关问题 更多 >