通常,我通过迭代一些数据来构建数组,例如:
my_array = []
for n in range(1000):
# do operation, get value
my_array.append(value)
# cast to array
my_array = array(my_array)
我发现我必须先构建一个列表,然后将其转换(使用“array”)为数组。有什么方法可以解决这些问题吗?所有这些转换调用都会使代码混乱...我如何迭代地构建“my_array”,从一开始它就是一个数组?
4条答案
按热度按时间mrwjdhj31#
NumPy提供了一个'fromiter'方法:
其产生
hjqgdpho2#
建议的方法是在循环之前进行预分配,并使用切片和索引插入
numpy * 确实 * 提供了一个
array.resize()
方法,但是由于在循环中重新分配内存的成本,这将慢得多。如果您 * 必须 * 具有灵活性,那么恐怕唯一的方法是从list
创建一个array
。编辑:如果你担心你为你的数据分配了太多的内存,我会使用上面的方法来过度分配,然后当循环完成时,使用
array.resize()
删除数组中未使用的位。这将比在循环中不断地重新分配数组快 * 远 , 远 *。编辑:作为对@user248237评论的回应,假设您知道数组的任意一维(为简单起见):
一般的原则是“分配比您认为需要的更多的空间,如果情况发生变化,尽可能少地调整数组的大小”。将大小加倍可能被认为是过分的,但实际上这是其他语言的几个标准库中的几个数据结构所使用的方法(例如,默认情况下
java.util.Vector
会这样做。我认为C++中的几个std::vector
实现也会这样做)。yh2wf1be3#
使用
list.append()
构建数组似乎比动态调整Numpy数组的大小要快得多:第一个
n9vozmp44#
如果我没理解错你的问题,这应该能满足你的要求: