我正在使用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])
答案 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()
你会得到同样的结果。 (flatten
,ravel
,reshape
基本上都做同样的事情。)
np.concatenate(c,axis=0)
np.concatenate([c[0,:],c[1,:],c[2,:]...],axis=0)
concatenate
也可用于flatten
数组,但这不是常用的方法。实际上,它与按行拆分并连接它们相同。请注意,np.vstack(c)
不是一回事。