''给出条件然而它是获得的。 我想得到结果'在所需的形状。 我尝试了如下;但它超出了我的想象。
import numpy as np
data = [np.ones((300,1)), np.ones((300,5)), np.ones((300,3))]
result = []
for d in data:
**print np.shape(np.array(d))**
result.append(d)
print np.shape(np.array(result))
结果应该是这样的形状:
(300, 1+5+3) = (300,9)
有人能帮助我吗?
我得到了
ValueError:无法将形状(300,1)的输入数组广播为形状(300)
编辑:
数据只是为了提出这个问题;它只是我的大型计划的代表。给定条件是d
,这是一个列表,但列表中的不同形状是从for循环生成的。
答案 0 :(得分:2)
您的result
是Python list
。实际上它是list
,其内容与原始data
完全相同。您正在尝试水平连接数组(沿第二维),因此您需要使用numpy.hstack
:
import numpy as np
data = []
for d in some_source:
data.append(d)
result = np.hstack(data)
print result.shape
如果some_source
是列表,生成器或任何其他可迭代的,您可以更简洁地执行此操作:
result = np.hstack(some_source)
答案 1 :(得分:2)
3个2d数组最后一个维度的差异可以在该维度上连接
Np.concatenate(data, axis=1)
hstack
也是如此。
在我的评论中,我建议使用0轴,但这是一个快速反应,我没有机会测试它。
当你尝试创意而他们失败时,告诉我们出了什么问题。您列出ValueError
但不显示发生的位置。什么操作。
您的评论对d
有很大帮助,但您没有说明d
可能与data
的元素有何不同。
答案 2 :(得分:2)
您还可以尝试numpy.column_stack
,它本质上是numpy.concatenate
。
In [1]: import numpy as np
In [2]: data = [np.ones((300,1)), np.ones((300,5)), np.ones((300,3))]
In [3]: out = np.column_stack(data)
In [4]: out.shape
Out[4]: (300, 9)
答案 3 :(得分:1)
您希望水平堆叠元素(如果您将每个元素想象为具有300行和可变列数的矩阵),即
import numpy as np
data = [np.ones((300,1)), np.ones((300,5)), np.ones((300,3))]
result = np.hstack(data)
如果您只能访问生成元素d
的迭代器,则可以实现以下相同:
result = np.hstack([d for d in some_iterator_that_generates_your_ds])
答案 4 :(得分:0)
尝试:
import numpy as np
data = [np.ones((300,1)), np.ones((300,5)), np.ones((300,3))]
result = []
print(len(data))
for d in data:
result.append(np.hstack(d))
print(result.shape)
这应该可以胜任。您也可以尝试:
import numpy as np
data = np.ones((300,1)), np.ones((300,5)), np.ones((300,3))
result = np.vstack(data[-1])
print(result.shape)
两者都会产生(300, 3)
作为输出。
如果您正在寻找(300, 9)
,则可以执行以下操作:
result = np.hstack(data)
最后,如果您希望结果位于list()
而不是numpy.array
或numpy.matrix
,那么您可以将.tolist()
粘贴到最后,像这样:result.tolist()
。