将一个数组的第一列替换为另一个数组的第一列

时间:2018-03-27 21:23:20

标签: python arrays numpy

如何替换数组的第一列?y'通过数组的第一列' x'?

x = np.array([[1]
              [2]
              [3]
              [4]
              [5]])

y = np.array([[6, 7]
              [8, 9]
              [10, 11]
              [12, 13]
              [14, 15]])

预期结果将是:

res = np.array([[1, 7]
                [2, 9]
                [3, 11]
                [4, 13]
                [5, 15]])

2 个答案:

答案 0 :(得分:1)

首先要注意的是 numpy数组没有行和列。这不仅仅是一个术语问题。他们真的没有行和列。相反,它们具有尺寸形状

例如,以下数组具有1个维度和形状(5,)(这是一个带有一个元素的元组)。

z = np.array([1, 2, 3, 4, 5])
print(z.ndim, z.shape)  # 1 (5,)

<强>就地

清除完毕后,您可以使用numpy数组来执行的操作

y[:, 0][:, None] = x

print(y)

# [[ 1  7]
#  [ 2  9]
#  [ 3 11]
#  [ 4 13]
#  [ 5 15]]

[:, None]部分的原因是为了确保等式左边的尺寸和形状与右边的尺寸和形状相同。

新阵列

如果你真的需要一个新数组,只需复制数组并执行相同的操作:

res = y.copy()
res[:, 0][:, None] = x

答案 1 :(得分:-1)

你的意思是这样吗?

glot.io fiddle

我们定义一个辅助函数merge来从列表中提取元素,我们采用两个参数ab作为列表,因此我们可以通过索引访问它们的值。我们需要x子列表中的第一个也是唯一一个值,因此我们通过a[0]得到它,通过访问y获取b[1]子列表中的第二个值将其作为包含这些值的新列表返回。

然后我们map我们的帮助merge同时列出xy,将结果转换为list()并将其投放到np.array() }

import numpy as np

x = np.array([[1],[2],[3],[4],[5]])

y = np.array([[6, 7], [8, 9], [10, 11], [12, 13], [14, 15]])

merge = lambda a,b: [a[0],b[1]] 
res = np.array(list(map(merge, x, y)))

#show results
print(res)