Gabungkan dua larik numpy

Saya mencoba menggabungkan dua larik dengan jumlah argumen yang sama.

Masukan:

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]]

Keluaran yang saya harapkan:

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]]

Untuk melakukan itu saya membuat loop sederhana:

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

Saya mendapati saya mengisi bahwa saya melewatkan sesuatu. Pertama-tama loop saya sangat lambat. Kedua, data saya cukup banyak, saya punya lebih dari 2 mlns baris untuk loop. Jadi saya mencoba mencari cara yang lebih cepat misalnya dengan kode ini:

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

Ini bekerja jauh lebih cepat daripada loop sebelumnya tetapi hanya menambahkan nilai pertama dari array kedua. Bisakah Anda membantu saya?

Larutan

Gunakan np.array dan kemudian 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)

Dimana axis=1 berarti kita ingin menggabungkan secara horizontal.

Itu bekerja untuk saya

Komentar (0)

Gunakan 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])

Jika Anda membutuhkannya sebagai daftar, gunakan metode tolist:

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