2017-04-05 26 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