2017-10-11 97 views
2

假设我有2个numpy 2D数组,mins和maxs,它们将始终是相同的维度。我想创建第三个数组,结果,这是将linspace应用于最大值和最小值的结果。有没有一些“numpy”/矢量化的方式来做到这一点?非矢量化代码示例如下,以显示我想要的结果。跨多维数组的向量化NumPy空间

import numpy as np 

mins = np.random.rand(2,2) 
maxs = np.random.rand(2,2) 

# Number of elements in the linspace 
x = 3 

m, n = mins.shape 
results = np.zeros((m, n, x)) 

for i in range(m): 
    for j in range(n): 
     min = mins[i][j] 
     max = maxs[i][j] 
     results[i][j] = np.linspace(min, max, num=x) 
+0

如何从'np.linspace缩放结果( 0,1,NUM = X)'? – hpaulj

+0

如何在这种情况下获得最小值和最大值? – holtc

+1

'mins [...,None] +(maxs-mins)[...,None] * np.linspace(0,1,num = x)'。这使用广播通过'mins'和'maxs'来缩放'linspace'。 – hpaulj

回答

3

下面是基于this post一个量化的方法,用于支付一般的正昏暗的情况下 -

def create_ranges_nd(start, stop, N, endpoint=True): 
    if endpoint==1: 
     divisor = N-1 
    else: 
     divisor = N 
    steps = (1.0/divisor) * (stop - start) 
    return start[...,None] + steps[...,None]*np.arange(N) 

采样运行 -

In [536]: mins = np.array([[3,5],[2,4]]) 

In [537]: maxs = np.array([[13,16],[11,12]]) 

In [538]: create_ranges_nd(mins, maxs, 6) 
Out[538]: 
array([[[ 3. , 5. , 7. , 9. , 11. , 13. ], 
     [ 5. , 7.2, 9.4, 11.6, 13.8, 16. ]], 

     [[ 2. , 3.8, 5.6, 7.4, 9.2, 11. ], 
     [ 4. , 5.6, 7.2, 8.8, 10.4, 12. ]]])