2024-04-26 20:21:52 发布
网友
我有两个numpy2d数组x&y,尺寸为x(700,5)和y(10,5)。你知道吗
当我运行以下命令时
xy = list(zip(x.T, y.T))
我得到一个有5个元组的列表。在每个元组中,有两个维度为(700,)和(10,)的数组。你知道吗
我需要它们是(700,1)和(10,1)。你知道吗
我该怎么做?你知道吗
In [128]: a = np.ones((5,3),int) In [129]: a.T Out[129]: array([[1, 1, 1, 1, 1], [1, 1, 1, 1, 1], [1, 1, 1, 1, 1]]) In [131]: list(zip(a.T, (a+3).T)) Out[131]: [(array([1, 1, 1, 1, 1]), array([4, 4, 4, 4, 4])), (array([1, 1, 1, 1, 1]), array([4, 4, 4, 4, 4])), (array([1, 1, 1, 1, 1]), array([4, 4, 4, 4, 4]))]
zip迭代输入的第一个dim。在本例中,是换位数组的行。所以每次迭代都取一行,一个一维数组。结果是一个元组列表,每个元组由两个1d数组组成。你知道吗
zip
我们可以在处理之前向a添加维度:
a
In [132]: a=a[None,:,:] In [133]: a.shape Out[133]: (1, 5, 3) In [134]: a.T.shape Out[134]: (3, 5, 1) In [135]: list(zip(a.T, (a+3).T)) Out[135]: [(array([[1], [1], [1], [1], [1]]), array([[4], [4], [4], ... [4], [4]]))] In [136]: _[0][0].shape Out[136]: (5, 1)
我不认为它漂亮,但它似乎符合你的要求。你知道吗
或者您可以使用列表来展开zip,然后添加维度:
In [139]: [(i[:,None],j[:,None]) for i,j in zip(a.T, (a[:2]+3).T)] Out[139]: [(array([[1], [1], [1], [1], [1]]), array([[4], [4]])), (array([[1], [1], [1], [1], [1]]), array([[4], [4]])), (array([[1], [1], [1], [1], [1]]), array([[4], [4]]))]
这也适用于:
list(zip(*np.atleast_3d(a.T,b.T)))
atleast_3d可以对数组列表进行操作,使每个数组都(M,N,1)。这是一个我不经常使用的特殊函数。你知道吗
atleast_3d
zip
迭代输入的第一个dim。在本例中,是换位数组的行。所以每次迭代都取一行,一个一维数组。结果是一个元组列表,每个元组由两个1d数组组成。你知道吗我们可以在处理之前向
a
添加维度:我不认为它漂亮,但它似乎符合你的要求。你知道吗
或者您可以使用列表来展开zip,然后添加维度:
这也适用于:
atleast_3d
可以对数组列表进行操作,使每个数组都(M,N,1)。这是一个我不经常使用的特殊函数。你知道吗相关问题 更多 >
编程相关推荐