Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何有效地将两个大型numpy数组排序为一个数组数组?_Python_Numpy - Fatal编程技术网

Python 如何有效地将两个大型numpy数组排序为一个数组数组?

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

假设我有两个二维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_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]])