2つのnumpy配列をマージする

同じ数の引数を持つ2つの配列を結合しようとしています。

入力します。

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

私が期待する出力

final = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775, 1],
             [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745, 2],
             [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745, 3]]

そのために、簡単なループを作っています。

for i in first:
        for j in second:
            final += np.append(j, i)

何か足りないものがあるような気がしてきました。まず第一に、私のループは非常に遅いです。次に、私のデータは非常に多く、ループするために2mlns行以上を持っています。だから、私はより速い方法を見つけるために、例えば、このコードを試してみました。

final = [np.append(i, second[0]) for i in first] 

これは、以前のループよりもはるかに速く動作しますが、2番目の配列の最初の値のみを追加しています。 助けていただけますか?

ソリューション

np.arrayを使用し、次にnp.concatenate` を使用します。

import numpy as np

first = np.array([[650001.88, 300442.2,   18.73,  0.575,  
                   650002.094, 300441.668, 18.775],
                  [650001.96, 300443.4,   18.7,   0.65,   
                   650002.571, 300443.182, 18.745],
                  [650002.95, 300442.54,  18.82,  0.473,  
                   650003.056, 300442.085, 18.745]])

second = np.array([[1],
                   [2],
                   [3]])

np.concatenate((first, second), axis=1)

ここで、axis=1は水平方向に連結することを意味します。

これは私のために動作します

解説 (0)

np.column_stack`を使用します。

import numpy as np

first = [[650001.88, 300442.2,   18.73,  0.575,  650002.094, 300441.668, 18.775],
         [650001.96, 300443.4,   18.7,   0.65,   650002.571, 300443.182, 18.745],
         [650002.95, 300442.54,  18.82,  0.473,  650003.056, 300442.085, 18.745]]

second = [[1],
          [2],
          [3]]

np.column_stack([first, second])

リストとして必要な場合は、tolist メソッドを使用してください。

np.column_stack([first, second]).tolist()
解説 (0)