在Python中,我有一个元组列表,每个元组包含两个nx1向量。
data = [(np.array([0,0,3]), np.array([0,1])),
(np.array([1,0,4]), np.array([1,1])),
(np.array([2,0,5]), np.array([2,1]))]
现在,我想将此列表分为两个矩阵,以向量为列。
所以我想要:
x = np.array([[0,1,2],
[0,0,0],
[3,4,5]])
y = np.array([[0,1,2],
[1,1,1]])
现在,我有以下内容:
def split(data):
x,y = zip(*data)
np.asarray(x)
np.asarray(y)
x.transpose()
y.transpose()
return (x,y)
这很好用,但是我想知道是否存在更清洁的方法,该方法不使用zip(*)函数和/或不需要转换和转置x和y矩阵。
答案 0 :(得分:3)
这是纯粹的娱乐活动,因为如果我要执行您想做的事情,我将使用zip
解决方案。
但是没有zipping
的方法就是沿着轴1 vstack
。
a = np.array(data)
f = lambda axis: np.vstack(a[:, axis]).T
x,y = f(0), f(1)
>>> x
array([[0, 1, 2],
[0, 0, 0],
[3, 4, 5]])
>>> y
array([[0, 1, 2],
[1, 1, 1]])
答案 1 :(得分:0)
将所有先前提出的方法的最佳元素进行比较,我认为最好如下*:
def split(data):
x,y = zip(*data) #splits the list into two tuples of 1xn arrays, x and y
x = np.vstack(x[:]).T #stacks the arrays in x vertically and transposes the matrix
y = np.vstack(y[:]).T #stacks the arrays in y vertically and transposes the matrix
return (x,y)
*这是我的代码的一个片段