如何使用numpy mgrid或meshgrid完成这个简单的任务

时间:2017-04-15 09:21:56

标签: python arrays numpy vector

我有一个简单的事情要做,但我仍然没有成功使用numpy mgrid& meshgrid。 我有一个100个元素的numpy向量:

[0,0,0...0]

我希望像这样创建一个1000x100 numpy数组,每次将一个向量值增加0.1,在到达1.0时切换到下一个向量值。 所以,第一次迭代应该给我:

[0.1 0 0..0]
[0.2 0 0..0]
.
.
[0.9 0 0..0]
[1.0 0 0..0]

从现在开始,我应该迭代第二个向量编号,保留以前的值:

[1.0 0.1 0 0..0]
[1.0 0.2 0 0..0]
[1.0 0.3 0 0..0]

等等。最终矩阵应该类似于1000x100,但我不需要在一个大的numpy数组中将所有值组合在一起 - 在每次迭代中迭代并产生相应的向量就足够了。 提前谢谢!

1 个答案:

答案 0 :(得分:1)

以下是使用initializationnp.maximum.accumulate -

的方法
def create_stepped_cols(n): # n = number of cols
    out = np.zeros((n,10,n))
    r = np.linspace(0.1,1.0,10)
    d = np.arange(n)
    out[d,:,d] = r
    out.shape = (-1,n)
    np.maximum.accumulate(out, axis=0, out = out)
    return out

样品运行 -

In [140]: create_stepped_cols(3)
Out[140]: 
array([[ 0.1,  0. ,  0. ],
       [ 0.2,  0. ,  0. ],
       [ 0.3,  0. ,  0. ],
       [ 0.4,  0. ,  0. ],
       [ 0.5,  0. ,  0. ],
       [ 0.6,  0. ,  0. ],
       [ 0.7,  0. ,  0. ],
       [ 0.8,  0. ,  0. ],
       [ 0.9,  0. ,  0. ],
       [ 1. ,  0. ,  0. ],
       [ 1. ,  0.1,  0. ],
       [ 1. ,  0.2,  0. ],
       [ 1. ,  0.3,  0. ],
       [ 1. ,  0.4,  0. ],
       [ 1. ,  0.5,  0. ],
       [ 1. ,  0.6,  0. ],
       [ 1. ,  0.7,  0. ],
       [ 1. ,  0.8,  0. ],
       [ 1. ,  0.9,  0. ],
       [ 1. ,  1. ,  0. ],
       [ 1. ,  1. ,  0.1],
       [ 1. ,  1. ,  0.2],
       [ 1. ,  1. ,  0.3],
       [ 1. ,  1. ,  0.4],
       [ 1. ,  1. ,  0.5],
       [ 1. ,  1. ,  0.6],
       [ 1. ,  1. ,  0.7],
       [ 1. ,  1. ,  0.8],
       [ 1. ,  1. ,  0.9],
       [ 1. ,  1. ,  1. ]])

In [141]: create_stepped_cols(100).shape
Out[141]: (1000, 100)