[英]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]]
要獲得“對角線”,可以采用向量索引的乘積而不是向量本身。 這樣,您可以訪問每個組合的值以及組合的先前值。
例:
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.