Python Numpy矢量化而不是for循环

Python Numpy矢量化而不是for循环,python,numpy,vectorization,Python,Numpy,Vectorization,我写了一个函数,当与for循环一起使用时,它太耗时了。它在每次迭代中将numpy向量(10,0)作为行追加。我如何在迭代中使用矢量化numpy解决方案来加快速度 有没有提示为什么下面的vstack数组解决方案比append list解决方案更慢 短暂性脑缺血发作 TIAnp.random.rand()设计用于返回所需的任何形状的输出,就像许多其他numpy方法一样。所以,不需要将相同长度的列表连接起来。尝试: r_numbers = np.random.rand(n_iterations, n_

我写了一个函数,当与for循环一起使用时,它太耗时了。它在每次迭代中将numpy向量(10,0)作为行追加。我如何在迭代中使用矢量化numpy解决方案来加快速度

有没有提示为什么下面的vstack数组解决方案比append list解决方案更慢

短暂性脑缺血发作

TIA

np.random.rand()
设计用于返回所需的任何形状的输出,就像许多其他
numpy
方法一样。所以,不需要将相同长度的列表连接起来。尝试:

r_numbers = np.random.rand(n_iterations, n_cols)
并对所有列进行排序:

np.sort(r_numbers, axis=1)

通常,您不希望附加到
numpy
数组。为它们重新分配空间太耗时了。如果您知道
n\u迭代
,您可以这样预先分配:

result_array = np.empty([n_iterations, n_cols]) 

for i in range(n_iterations):
    result_array[i] = sample_func()

但是您可以更好地“矢量化”任何位于
sample\u func
中的内容,以接受n-d输入<
python
中的code>for循环速度很慢
numpy
为您提供了许多技巧,可以将
for
循环推入编译的
c
-代码(称为“矢量化”),但在不知道函数中发生了什么的情况下,我们无法帮助您将其矢量化。

一般避免附加
np.sort
允许沿轴排序。list append添加指向现有列表的引用/指针
vstack
使用完整副本创建一个新数组。只需使用它一次就可以连接整个列表数组,而不是以增量的方式。只要您的函数是用Python编写的,并且一次只占用一行,您就没有什么可以做的了。特别是如果它很复杂,那么多次评估该功能所花费的时间将占主导地位。迭代机制,如列表附加,将是一个相对较小的时间消耗。非常感谢。我只想用最简单的函数sample_func来表达这个问题。我的问题是,考虑到这是另一个与随机值无关的更复杂的函数,如何加快上述解的速度。如何用纯numpy解决方案替换for循环?@greg2021
numpy
不适合它。数组不允许有不稳定的长度,不像Python列表(或其他结构),试着找到一种方法来矢量化它(我的意思是找到一个计算所有行的通用规则)。如果你需要不断更新一个列表,我不知道最好的方法,因为它们注定都会很慢。但是你可以尝试更多的事情,比如
np.concatenate
、list comprehension、
append
以及你提出的那些。在大多数情况下,
append
似乎很有希望。
result_array = np.empty([n_iterations, n_cols]) 

for i in range(n_iterations):
    result_array[i] = sample_func()