【发布时间】:2016-07-31 03:34:02
【问题描述】:
我正在生成一系列 numpy 数组,如下所示:
def chunker(seq, size):
return (seq[pos:pos + size] for pos in range(0, len(seq), size))
for i in chunker(X,10000):
e = function(i)
print('new marix',e)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
...
new matrix (10000, 3208)
我想将vstack 上述n 矩阵合并为一个。因此,我尝试了以下方法:
X = np.vstack(e)
但是,当我打印 X 时,我又得到了:
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
new matrix (10000, 3208)
...
new matrix (10000, 3208)
而不是新的 vstacked 单矩阵。知道如何 vstack 这个 numpy 数组序列吗?
更新
根据 jedward 的回答,我将代码编辑如下:
将 numpy 导入为 np
def chunker(seq, size):
return (seq[pos:pos + size] for pos in range(0, len(seq), size))
for (r,i) in enumerate(chunker(X,10000)):
e = function(i)
print('new matrix',e)
X[r,:] = e
print(X)
【问题讨论】:
-
vstack的输入应该是最后一维匹配的数组列表。e看起来不像。您需要将个人e收集到一个列表中。 -
在你的循环中,
e的形状是什么?X的?X[r,:]? -
X.shape = (878049, 3208), e.shape = (10000, 3208), 合并[r,:].shape = (3208,)。内核似乎已经死了。它将自动重新启动。感谢@hpaulj 的帮助!我也得到:
The kernel appears to have died. It will restart automatically. -
e必须放入X中的chunk大小的插槽中,而不仅仅是一行。我建议在较小的测试用例上进行测试。
标签: python python-3.x numpy scipy