繁体   English   中英

将向量的每个元素的元素与同一向量的后续元素相除

[英]Divide elements of each element of a vector with subsequent elements of the same vector

我有一个包含 91 个项目的向量。 从这个向量中,我想导出一个新向量,其中每个元素除以向量中的每个后续元素。

例如,如果向量是

[2,4,6,8]

那么我想要这些操作

2/4, 2/6, 2/8, 4/6, 4/8, 6/8

这会给我

[0.5, 0.33, 0.25, 0.66, 0.5, 0.75]

我的向量包含 91 个元素,结果应该有 4095 个元素(使用组合公式nCr = n! / r!(nr)! )。

我假设我需要创建嵌套的 For 循环,因为变量j (分母)每增加一次变量i (分子)递增多次。 然后我需要进行除法,并将 append 的每个结果转换为一个新的向量(列表)。

所以我有一些解决方案(我认为):

my_new_vector = []  
For i in my_vector  
For j in my_vector  
quotient = i/j  
my_new_vector.append    

但在那之后,我只是不清楚如何构建嵌套的 For 循环。

你很接近,你确实需要两个叠瓦环:

test = [2,4,6,8]
ans = []

for i in range(len(test)): # for each value of the array
    for j in range(i+1, len(test)): # We go from the next value to the end of the array.
        ans.append(test[i]/test[j])

不要犹豫打印test[i]test[j]以更好地了解它是如何工作的。

来自 itertools 的组合可以直接为您做到这一点:

from itertools import combinations

numbers = [2,4,6,8]
divisions = [a/b for a,b in combinations(numbers,2)]

print(divisions)
# [0.5, 0.3333333333333333, 0.25, 0.6666666666666666, 0.5, 0.75]

如果您不想使用库,则可以像这样以更 Pythonic 的方式制作循环:

divisions = []
for i,a in enumerate(numbers[:-1],1):
    divisions.extend(a/b for b in numbers[i:])

print(divisions) # [0.5, 0.3333333333333333, 0.25, 0.6666666666666666, 0.5, 0.75]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM