我有下面的numpy数组

import numpy as np
a = np.array([1,2,6,8])

我想从a创建另一个numpy数组,以便它包含a的两个元素的所有不同的可能和。很容易证明存在不同的可能和,由以下组成:
a[0] + a[1]
a[0] + a[2]
a[0] + a[3]
a[1] + a[2]
a[1] + a[3]
a[2] + a[3]

如果不使用double for循环(这是我唯一能想到的方法),我如何构造一个包含上述和作为元素的numpy数组。对于上面的示例,输出应该int(a.size*(a.size-1)/2)
MWE公司
eff = int(a.size*(a.size-1)/2)
c = np.empty((0, eff))

最佳答案

您可以使用triu_indices

i0,i1 = np.triu_indices(4,1)
a[i0]
# array([1, 1, 1, 2, 2, 6])
a[i1]
# array([2, 6, 8, 6, 8, 8])
a[i0]+a[i1]
# array([ 3,  7,  9,  8, 10, 14])

对于更多的条款,我们需要建立自己的“nd_triu_idx”。以下是如何在5个术语中选择3个术语:
n = 5
full = np.mgrid[:n,:n,:n]
nd_triu_idx = full[:,(np.diff(full,axis=0)>0).all(axis=0)]
nd_triu_idx
# array([[0, 0, 0, 0, 0, 0, 1, 1, 1, 2],
#        [1, 1, 1, 2, 2, 3, 2, 2, 3, 3],
#        [2, 3, 4, 3, 4, 4, 3, 4, 4, 4]])

要完全概括术语的数量,请使用
k = 4
full = np.mgrid[k*(slice(n),)]

等。

关于python - 在Python中创建此numpy数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58404635/

10-12 22:25