高效的算法方法将数组的行连接成1-D数组

时间:2015-05-03 17:19:01

标签: python arrays algorithm numpy

我正在使用Numpy来处理一些非常奇怪的表格数据。数据条目总是以每个1200个条目的列为单位。

但是,行数总是不同的。有时我导入的表有12行(即一个numpy ndarray.shape = (12, 1200),总共12个条目1200次,即1200 * 12 = 14400.)有时表有6行(shape =(6,1200)),并且等等。这里没有模式。

列数始终为1200,但行数总是不同。我之前没有关于行数的知识,所以我不能写出某种数学公式。

我想使用numpy.concatenate将我给出的每个数组转换为一维ndarray。 (对于我们上面的例子,那将是shape =(1,14400)。)

到目前为止,对于每个单独的数组,我必须将其单独分解为N个数组(N =未知行数),然后单独连接它们。

或者,为了编写for语句,我必须找到行数,并为每个数组手动设置for语句。

有什么想法可以提供更好的方法吗?这需要永远。

编辑:对不起,混在一起"行"和#34;列"。我重新输入上面的帖子来反映这一点。是的,数组的形状始终为(n, 1200). So, the format is(行,列)`,列始终为1200.

更多问题:关于numpy.reshape的问题是数据的顺序是否发生了变化。那么,对于一个有6行的数组,形状(6,1200),numpy.reshape()会返回一个数组形状(1,72000),以便保留原始顺序吗?也就是说,

newarray = array([row 1, row 2, row 3, row 4, row 5, row 6])

1 个答案:

答案 0 :(得分:0)

所以你有几个形状为(n,1200)

的数组

制作一些更简单的样本。它会更容易看到发生了什么。

a = np.arange(12).reshape(2,6)
#array([[ 0,  1,  2,  3,  4,  5],
        [ 6,  7,  8,  9, 10, 11]])

注意数字如何增加

b = np.arange(18).reshape(3,6)
c = np.concatenate([a,b], axis=0)
制造

array([[ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [ 0,  1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10, 11],
       [12, 13, 14, 15, 16, 17]])

由于它只是第一个维度变化,因此沿此维度连接没有问题。 np.vstack做同样的事情。

扁平化后连接数组怎么样:

np.concatenate([a.flatten(),b.flatten()])
# array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11,  0,  1,  2,  3,  4, 5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17])

c.flatten()你会得到同样的结果。 (flattenravelreshape基本上都做同样的事情。)

np.concatenate(c,axis=0)
np.concatenate([c[0,:],c[1,:],c[2,:]...],axis=0)

concatenate也可用于flatten数组,但这不是常用的方法。实际上,它与按行拆分并连接它们相同。请注意,np.vstack(c)不是一回事。