2017-04-05 57 views
1

我有兩個numpy數組充當我想要生成的一系列矢量的下邊界和上邊界。用numpy數組作爲邊界的替代方案

在一個類似的方式,人氣指數()的作品,我想生成中間構件如示例:

lower_boundary = np.array([1,1]) 
upper_boundary = np.array([3,3]) 

expected_result = [[1,1], [1,2], [1,3], [2,1], [2,2], [2,3], [3,1], [3,2], [3,3]] 

的結果可以是一個列表或另一numpy的陣列。到目前爲止,我已設法通過嵌套循環來解決這種情況,但「lower_boundary」和「upper_boundary」的維度可能會有所不同,我的方法也不適用。

在典型的情況下,兩個邊界至少有4個維度。

+0

如果'upper_boundary = np.array([4,3])''有什麼期望的輸出? – Divakar

+0

對於這種情況: expected_result = [[1,1],[1,2],[1,3],[2,1],[2,2],[2,3],[3,1 ],[3,2],[3,3],[4,3]] – pabloxrl

回答

4

您可以使用np.indicies來獲得一定範圍所需的範圍(upper_boundary - lower boundary + 1)的指數值,它重塑您的需要(reshape(len(upper_boundary),-1)),並添加您的lower_boundry,導致價值觀;

>>> np.indices(upper_boundary - lower_boundary + 1).reshape(len(upper_boundary),-1).T + lower_boundary 
array([[1, 1], 
     [1, 2], 
     [1, 3], 
     [2, 1], 
     [2, 2], 
     [2, 3], 
     [3, 1], 
     [3, 2], 
     [3, 3]]) 

編輯:我忘了更正發佈前的代碼,它應該是這樣的。 感謝@Divakar的修復。

+1

認爲正確的/通用的版本會是這樣的:'np.indices(upper_boundary - lower_boundary + 1).reshape(len(upper_boundary) ,-1).T + lower_boundary'。 – Divakar

+0

@Divakar良好的捕獲,我使用3,3代替所述變量,忘記糾正它。現在就解決它,謝謝。 – umutto

+1

是的,OP列出簡單化樣本的缺陷:) – Divakar