我想得到以下信息:
>>> 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()
