簡體   English   中英

Python n維數組組合

[英]Python n-dimensional array combinations

假設任意數量的任意長度的數組。 我想從數組中的值構造所有組合的n維數組。 甚至更好的是所有組合的列表。

但是,我也希望每個組合都使用前面的“對角線”元素,除非該元素不存在,否則將不存在的值設置為-inf。

以前。 以下是簡單的二維情況:

v1=[-2,2]
v2=[-3,3]

從中我會得到所有的組合

[[-2,-3],  
 [-2,3],  
 [2,-3],  
 [2,3]]

或以2D陣列/矩陣形式

      -3     3
-2  -2,-3  -2,3
 2   2,-3   2,3

現在,我也想為每個元素添加一個包含先前“對角線”元素的新列(在這種情況下,只有1個這種實際情況)。 先前的“對角線”元素是指索引i-1,j-1,k-1,...,n-1處的元素。 邊際上,我們采用所有可能的先前值。

  1      2
-2,-3  -inf,-inf
-2, 3  -inf,-3
 2,-3  -2,-inf
 2, 3  -2,-3

編輯:這是2D情況的代碼,對於一般的n情況使用不多。

import math

v1=[-3,-1,2,4]
v2=[-2,0,2]

tmp=[]
tmp2=[]
for i in range(0,len(v1)):
    for j in range(0,len(v2)):
        tmp.append([v1[i],v2[j]])
        if i==0 and j==0:
            tmp2.append([-math.inf,-math.inf])
        elif i==0:
            tmp2.append([-math.inf,v2[j-1]])
        elif j==0:
            tmp2.append([v1[i-1],-math.inf])
        else:
            tmp2.append([v1[i-1],v2[j-1]])

所以

tmp

[[-3, -2],
 [-3, 0],
 [-3, 2],
 [-1, -2],
 [-1, 0],
 [-1, 2],
 [2, -2],
 [2, 0],
 [2, 2],
 [4, -2],
 [4, 0],
 [4, 2]]

tmp2

[[-inf, -inf],
 [-inf, -2],
 [-inf, 0],
 [-3, -inf],
 [-3, -2],
 [-3, 0],
 [-1, -inf],
 [-1, -2],
 [-1, 0],
 [2, -inf],
 [2, -2],
 [2, 0]]

看看itertools.product()

要獲得“對角線”,可以采用向量索引的乘積而不是向量本身。 這樣,您可以訪問每個組合的值以及組合的先前值。

例:

import itertools

v1=[-2,2]
v2=[-3,3]
vectors = [v1, v2]

combs = list(itertools.product(*[range(len(v)) for v in vectors]))

print(combs)

[(0,0),(0,1),(1,0),(1,1)]

print([[vectors[vi][ci] for vi, ci in enumerate(comb)] for comb in combs])

[[-2,-3],[-2、3],[2,-3],[2、3]

print([[(vectors[vi][ci-1] if ci > 0 else np.inf) for vi, ci in enumerate(comb)] for comb in combs])

[[inf,inf],[inf,-3],[-2,inf],[-2,-3]]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM