Skip to main content
 首页 » 编程设计

python之取消列出 np.linspace 的结果

2025年05月04日22yxwkf

我想得到以下信息:

>>> import numpy as np 
>>> import itertools 
>>> a1 = np.random.randn(100) 
>>> a2 = np.random.randn(100) 
>>> l = [np.linspace(start=np.asscalar(min(a1[i],a2[i])), stop=np.asscalar(max(a1[i],a2[i])), num=30) for i in range(len(a1))] 

但是,l 中的元素现在是数组。我想要一份花车 list 。如果我这样做

l = [np.linspace(start=np.asscalar(min(a1[i],a2[i])), stop=np.asscalar(max(a1[i],a2[i])), num=30).tolist() for i in range(len(a1))] 

我得到了一个列表列表,所以我需要通过以下方式解压内部列表

>>> list(chain.from_iterable(l)) 

我的列表非常大,所以我想从一开始就得到正确的结果。有没有办法实现这一目标,或者是否需要通过 itertools 链执行第二步?

请您参考如下方法:

既然你知道你的最终列表有 100 * 30 个值,你可以直接生成一个正确大小的 numpy.array:

import numpy as np 
a1 = np.random.randn(100) 
a2 = np.random.randn(100) 
start = np.minimum(a1, a2)[:, None] 
stop = np.maximum(a1, a2)[:, None] 
values = (np.linspace(0,1,30)[None, :] * (stop-start) + start).ravel()