向量元组列表->两个矩阵

时间:2019-08-28 17:16:00

标签: python numpy tuples

在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矩阵。

2 个答案:

答案 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)

*这是我的代码的一个片段