我正在尝试对numpy数组进行线性组合。
我有三个numpy数组列表:
a = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])]
b = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])]
c = [np.random.normal(0,1, [1,2]), np.random.normal(0,1, [3,4]), np.random.normal(0,1, [10,11])]
我想基于相应元素的a
值,以元素方式组合列表b
和c
中每个数组中的每个元素,以获得新列表d
:说d_i = a_i * c_i + (1-c_i) *b_i
(线性组合)。
我想在a
中选择每个数组中的每个元素,并在b
和c
中找到相应的元素然后合并。但是,我发现这很麻烦,效率低,而且有点愚蠢。有谁能建议更好的方法?
答案 0 :(得分:1)
假设您的所有列表长度相同,那么我认为没有比
更有效的方法了。d = [a[i] * c[i] + (1-c[i]) * b[i] for i in range(len(a))]
现在,如果您需要做的只是在列表d
上运行一次,那么也许您可以通过生成器理解加快速度?
d = (a[i] * c[i] + (1-c[i]) * b[i] for i in range(len(a)))
但是在一天结束时,没有办法在不到线性的时间内创建元素的线性组合。