如何将两个不同数组的值合并到一个数组中 python
How to merge ith values of two different array in one array python
我有一个针对特定问题的解决方案,因为
[[0.34 0.26 0.76 ]
[0.79 0.82 0.37 ]
[0.93 0.87 0.94]]
对于与
相同的问题,我有另一个解决方案
[[0.21 0.73 0.69 ]
[0.35 0.24 0.53]
[0.01 0.42 0.50]]
现在我必须将它们的第 i 个位置合并在一起,这样得到的数组就像
[[0.34 0.21]
[0.26 0.73]
[0.76 0.69]
[0.79 0.35]
..........
..........
设置
x = np.array([[0.34, 0.26, 0.76 ], [0.79, 0.82, 0.37 ], [0.93, 0.87, 0.94]])
y = np.array([[0.21, 0.73, 0.69 ], [0.35, 0.24, 0.53], [0.01, 0.42, 0.50]])
dstack
和 ravel
np.dstack([x.ravel(), y.ravel()])
array([[[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]]])
如果您担心这引入的额外维度,您可以 vstack
并转置:
np.vstack([x.ravel(), y.ravel()]).T
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
另一种选择np.column_stack
np.column_stack([x.ravel(), y.ravel()])
您可以在 2 个阵列上使用 vstack
并适当地重新整形:
np.vstack([arr1,arr2]).reshape(2,-1).T
示例:
>>> arr1
array([[ 0.34, 0.26, 0.76],
[ 0.79, 0.82, 0.37],
[ 0.93, 0.87, 0.94]])
>>> arr2
array([[ 0.21, 0.73, 0.69],
[ 0.35, 0.24, 0.53],
[ 0.01, 0.42, 0.5 ]])
>>> np.vstack([arr1,arr2]).reshape(2,-1).T
array([[ 0.34, 0.21],
[ 0.26, 0.73],
[ 0.76, 0.69],
[ 0.79, 0.35],
[ 0.82, 0.24],
[ 0.37, 0.53],
[ 0.93, 0.01],
[ 0.87, 0.42],
[ 0.94, 0.5 ]])
这是一个不需要 numpy 的单行代码:
[list(a) for a in zip(sum(x, []), sum(y, []))]
sum(x, [])
将列表的列表扁平化为单个扁平列表。然后我们将两个列表压缩在一起并列出元素。
您可以使用 ravel()
和 numpy.concatenate(x,y,axis)
:
np.concatenate((np.reshape(x.ravel(),(-1,1)),np.reshape(y.ravel(),(-1,1))),axis=1)
[[ 0.34 0.21]
[ 0.26 0.73]
[ 0.76 0.69]
[ 0.79 0.35]
[ 0.82 0.24]
[ 0.37 0.53]
[ 0.93 0.01]
[ 0.87 0.42]
[ 0.94 0.5 ]]
这里有更多方法可以做同样的事情。在可读性方面,numpy.ndarray.flatten
更直接。
输入数组:
In [207]: arr1
Out[207]:
array([[0.34, 0.26, 0.76],
[0.79, 0.82, 0.37],
[0.93, 0.87, 0.94]])
In [208]: arr2
Out[208]:
array([[0.21, 0.73, 0.69],
[0.35, 0.24, 0.53],
[0.01, 0.42, 0.5 ]])
第一步,将它们弄平:
In [209]: arr1_flattened = arr1.flatten()[:, np.newaxis]
In [210]: arr1_flattened
Out[210]:
array([[0.34],
[0.26],
[0.76],
[0.79],
[0.82],
[0.37],
[0.93],
[0.87],
[0.94]])
In [211]: arr2_flattened = arr2.flatten()[:, np.newaxis]
In [212]: arr2_flattened
Out[212]:
array([[0.21],
[0.73],
[0.69],
[0.35],
[0.24],
[0.53],
[0.01],
[0.42],
[0.5 ]])
然后连接或堆叠它们:
# just horizontally stack (np.hstack) the flattened arrays
In [213]: np.hstack([arr1_flattened, arr2_flattened])
Out[213]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
在一行中:
In [205]: np.hstack([arr1.flatten()[:, None], arr2.flatten()[:, None]])
Out[205]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
# same thing can be done using np.concatenate
In [206]: np.concatenate([arr1.flatten()[:, None], arr2.flatten()[:, None]], axis=1)
Out[206]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
注意所有的堆叠方法(stack
,hstack
,vstack
,dstack
,column_stack
),调用numpy.concatenate()
下引擎盖。
我有一个针对特定问题的解决方案,因为
[[0.34 0.26 0.76 ]
[0.79 0.82 0.37 ]
[0.93 0.87 0.94]]
对于与
相同的问题,我有另一个解决方案[[0.21 0.73 0.69 ]
[0.35 0.24 0.53]
[0.01 0.42 0.50]]
现在我必须将它们的第 i 个位置合并在一起,这样得到的数组就像
[[0.34 0.21]
[0.26 0.73]
[0.76 0.69]
[0.79 0.35]
..........
..........
设置
x = np.array([[0.34, 0.26, 0.76 ], [0.79, 0.82, 0.37 ], [0.93, 0.87, 0.94]])
y = np.array([[0.21, 0.73, 0.69 ], [0.35, 0.24, 0.53], [0.01, 0.42, 0.50]])
dstack
和 ravel
np.dstack([x.ravel(), y.ravel()])
array([[[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]]])
如果您担心这引入的额外维度,您可以 vstack
并转置:
np.vstack([x.ravel(), y.ravel()]).T
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
另一种选择np.column_stack
np.column_stack([x.ravel(), y.ravel()])
您可以在 2 个阵列上使用 vstack
并适当地重新整形:
np.vstack([arr1,arr2]).reshape(2,-1).T
示例:
>>> arr1
array([[ 0.34, 0.26, 0.76],
[ 0.79, 0.82, 0.37],
[ 0.93, 0.87, 0.94]])
>>> arr2
array([[ 0.21, 0.73, 0.69],
[ 0.35, 0.24, 0.53],
[ 0.01, 0.42, 0.5 ]])
>>> np.vstack([arr1,arr2]).reshape(2,-1).T
array([[ 0.34, 0.21],
[ 0.26, 0.73],
[ 0.76, 0.69],
[ 0.79, 0.35],
[ 0.82, 0.24],
[ 0.37, 0.53],
[ 0.93, 0.01],
[ 0.87, 0.42],
[ 0.94, 0.5 ]])
这是一个不需要 numpy 的单行代码:
[list(a) for a in zip(sum(x, []), sum(y, []))]
sum(x, [])
将列表的列表扁平化为单个扁平列表。然后我们将两个列表压缩在一起并列出元素。
您可以使用 ravel()
和 numpy.concatenate(x,y,axis)
:
np.concatenate((np.reshape(x.ravel(),(-1,1)),np.reshape(y.ravel(),(-1,1))),axis=1)
[[ 0.34 0.21]
[ 0.26 0.73]
[ 0.76 0.69]
[ 0.79 0.35]
[ 0.82 0.24]
[ 0.37 0.53]
[ 0.93 0.01]
[ 0.87 0.42]
[ 0.94 0.5 ]]
这里有更多方法可以做同样的事情。在可读性方面,numpy.ndarray.flatten
更直接。
输入数组:
In [207]: arr1
Out[207]:
array([[0.34, 0.26, 0.76],
[0.79, 0.82, 0.37],
[0.93, 0.87, 0.94]])
In [208]: arr2
Out[208]:
array([[0.21, 0.73, 0.69],
[0.35, 0.24, 0.53],
[0.01, 0.42, 0.5 ]])
第一步,将它们弄平:
In [209]: arr1_flattened = arr1.flatten()[:, np.newaxis]
In [210]: arr1_flattened
Out[210]:
array([[0.34],
[0.26],
[0.76],
[0.79],
[0.82],
[0.37],
[0.93],
[0.87],
[0.94]])
In [211]: arr2_flattened = arr2.flatten()[:, np.newaxis]
In [212]: arr2_flattened
Out[212]:
array([[0.21],
[0.73],
[0.69],
[0.35],
[0.24],
[0.53],
[0.01],
[0.42],
[0.5 ]])
然后连接或堆叠它们:
# just horizontally stack (np.hstack) the flattened arrays
In [213]: np.hstack([arr1_flattened, arr2_flattened])
Out[213]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
在一行中:
In [205]: np.hstack([arr1.flatten()[:, None], arr2.flatten()[:, None]])
Out[205]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
# same thing can be done using np.concatenate
In [206]: np.concatenate([arr1.flatten()[:, None], arr2.flatten()[:, None]], axis=1)
Out[206]:
array([[0.34, 0.21],
[0.26, 0.73],
[0.76, 0.69],
[0.79, 0.35],
[0.82, 0.24],
[0.37, 0.53],
[0.93, 0.01],
[0.87, 0.42],
[0.94, 0.5 ]])
注意所有的堆叠方法(stack
,hstack
,vstack
,dstack
,column_stack
),调用numpy.concatenate()
下引擎盖。