Python 如何有效地将两个大型numpy数组排序为一个数组数组?
假设我有两个二维numpy数组,每个数组实际上都非常大(100万个元素): 我想创建一个新数组,其元素是1d,两个元素数组来自a的I,j分量和b的I,j分量:Python 如何有效地将两个大型numpy数组排序为一个数组数组?,python,numpy,Python,Numpy,假设我有两个二维numpy数组,每个数组实际上都非常大(100万个元素): 我想创建一个新数组,其元素是1d,两个元素数组来自a的I,j分量和b的I,j分量: c = [[1,11], [2,22], [3,33], [4,44], [5,55], [6,66], [7,77], [8,88], [9,99]] 我正在尝试这样做: c = np.array([]) for i in range(0,3): for j in range(0,3): number_p
c = [[1,11], [2,22], [3,33], [4,44], [5,55], [6,66], [7,77], [8,88], [9,99]]
我正在尝试这样做:
c = np.array([])
for i in range(0,3):
for j in range(0,3):
number_pair = numpy.array([a[i,j], b[i,j]])
c = numpy.append(c, number_pair)
但是,这会“展平”阵列,从而产生:
c = [1,11,2,22,3,33,4,44,5,55,6,66,7,77,8,88,9,99]
这是vstack能处理的吗?有没有一种更简单的方法来考虑这个问题,并仍然得到预期的结果
如果有人能给我举个玩具的例子,我将不胜感激 让我们从简单数组上更简单的东西开始-
zip
:
In [113]: a = [1,2,3,4,5,6,7,8,9]
...: b = [11,22,33,44,55,66,77,88,99]
In [114]: list(zip(a,b))
Out[114]:
[(1, 11),
(2, 22),
(3, 33),
(4, 44),
(5, 55),
(6, 66),
(7, 77),
(8, 88),
(9, 99)]
这就是你想要的——除了它是一个元组列表,而不是列表
您的a
和b
似乎有某种嵌套,列表和列表。因此,它们需要展平才能使用这种zip
。有一些方法可以展平列表,但使用数组更简单
In [127]: np.array((a,b))
Out[127]:
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
In [128]: _.transpose(1,2,0).reshape(-1,2)
Out[128]:
array([[ 1, 11],
[ 2, 22],
[ 3, 33],
[ 4, 44],
[ 5, 55],
[ 6, 66],
[ 7, 77],
[ 8, 88],
[ 9, 99]])
但首先-尝试您的a
表达式:
In [116]: a = np.array([1,2,3],[4,5,6],[7,8,9])
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-116-41a87620921a> in <module>
----> 1 a = np.array([1,2,3],[4,5,6],[7,8,9])
ValueError: only 2 non-keyword arguments accepted
展平阵列很容易:
In [122]: a.ravel()
Out[122]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])
In [123]: list(zip(a.ravel(), b.ravel()))
Out[123]:
[(1, 11),
(2, 22),
(3, 33),
(4, 44),
(5, 55),
(6, 66),
(7, 77),
(8, 88),
(9, 99)]
我们还可以将这两个展平阵列合并为一个:
In [125]: np.array([a.ravel(),b.ravel()])
Out[125]:
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9],
[11, 22, 33, 44, 55, 66, 77, 88, 99]])
然后使用numpy
转置:
In [126]: np.array([a.ravel(),b.ravel()]).T
Out[126]:
array([[ 1, 11],
[ 2, 22],
[ 3, 33],
[ 4, 44],
[ 5, 55],
[ 6, 66],
[ 7, 77],
[ 8, 88],
[ 9, 99]])
有许多其他方法可以组合这些阵列
In [127]: np.array((a,b))
Out[127]:
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
In [128]: _.transpose(1,2,0).reshape(-1,2)
Out[128]:
array([[ 1, 11],
[ 2, 22],
[ 3, 33],
[ 4, 44],
[ 5, 55],
[ 6, 66],
[ 7, 77],
[ 8, 88],
[ 9, 99]])
怎么样np.stack([a,b],-1)。重塑(-1,2)
?
In [127]: np.array((a,b))
Out[127]:
array([[[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9]],
[[11, 22, 33],
[44, 55, 66],
[77, 88, 99]]])
In [128]: _.transpose(1,2,0).reshape(-1,2)
Out[128]:
array([[ 1, 11],
[ 2, 22],
[ 3, 33],
[ 4, 44],
[ 5, 55],
[ 6, 66],
[ 7, 77],
[ 8, 88],
[ 9, 99]])