合并两个NumPy数组

27
我会尽力帮助您进行翻译。以下是您需要翻译的内容:

我正在尝试合并两个具有相同参数数量的数组。

输入:

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)

我感觉自己遗漏了某些东西。首先,我的循环非常缓慢。其次,我的数据相当庞大,我有超过200万行需要循环。因此,我尝试寻找更快的方法,例如使用这段代码:

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

它比以前的循环速度更快,但只附加了第二个数组的第一个值。你能帮我吗?
4个回答

37

使用 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 意味着我们想要水平拼接。

对我来说没问题。


15
使用 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()

2
对于这种情况,hstack(因为second已经是2D)和c_(因为它沿第二个轴连接)也可以使用。事实上,即使second的形状为(3,),只要其长度与first的长度匹配,c_也可以工作。
假设firstsecond已经是numpy数组对象:
out = np.c_[first, second]

或者

out1 = np.hstack((first, second))

输出:

assert (out == np.array(final)).all() & (out == out1).all()

话虽如此,这些只是使用 np.concatenate 函数的不同方法。


0

将一个5x3矩阵乘以一个3x2矩阵(实矩阵乘积)

import numpy as np
np_1= np.arange(15).reshape(5,3)
np_1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接