如何创建一个Numpy 2d数组,行之间的差异相等?

时间:2012-12-04 02:58:16

标签: python arrays numpy multidimensional-array

如何创建这样的(48,64)Numpy数组:

i,      i,      i, .....,i
i+0.1,  i+0.1,..........,i+0.1
i+0.2,  i+0.2,..........,i+0.2
.
.
.
.
i+6.3,  i+6.3,..........,i+6.3

0.1是行之间的固定差异。

我已经用JoshAdel的答案完美地解决了这个问题,

但固定差异在列之间怎么样?即

i,i+0.1,i+0.2.....i+6.3
i,i+0.1,i+0.2.....i+6.3
.
.
.
i,i+0.1,i+0.2.....i+6.3

非常感谢!

2 个答案:

答案 0 :(得分:2)

import numpy as np
i = 10.0
a = np.empty((64,48))
a.fill(i)
a += np.arange(0,6.4,0.1)[:,np.newaxis]

Out[12]: 
array([[ 10. ,  10. ,  10. , ...,  10. ,  10. ,  10. ],
       [ 10.1,  10.1,  10.1, ...,  10.1,  10.1,  10.1],
       [ 10.2,  10.2,  10.2, ...,  10.2,  10.2,  10.2],
       ..., 
       [ 16.1,  16.1,  16.1, ...,  16.1,  16.1,  16.1],
       [ 16.2,  16.2,  16.2, ...,  16.2,  16.2,  16.2],
       [ 16.3,  16.3,  16.3, ...,  16.3,  16.3,  16.3]])

几点说明:

  • Numpy的形状约定是(nrow,ncolumn),所以你需要的形状是(64,48)而不是(48,64)你问题中的数组。

  • 有多种方法可以做到这一点,但我选择使用numpy的broadcasting表示法。

  • 您可以更紧凑地编写此内容,但为了说明的目的,我将其拆分为单独的步骤。

答案 1 :(得分:0)

执行此操作的另一种方法(仅仅是为了好玩)是使用tiledoc)

c = 10 + np.cumsum(np.ones(64))*.1 - .1
a = np.tile(c,(48,1)).T