python - 将两个 numpy 数组与连续行合并

标签 python numpy concatenation numpy-ndarray

我有两个 numpy 数组,希望将它们与以下规则合并,而不使用任何 for 循环。

  • 从第一个数组中取出前 n 行。
  • 添加第二个数组中的前 m 行。
  • 从第一个数组中添加 n 到 2n 之间的行。
  • 添加第二个数组中 m 到 2m 之间的行。

......

  • 添加第二个数组中的最后 m 行。

例如,假设我有两个数组,n=2, m=3

x = np.random.randint(10, size=(10, 6))
y = np.random.randint(20, size=(12, 6))

[[5 0 2 2 6 1]
 [4 8 9 2 7 2]
 [5 5 0 5 3 0]
 [2 1 4 7 9 4]
 [8 1 1 9 2 8]
 [4 1 1 0 1 1]
 [2 9 3 5 7 9]
 [3 6 6 6 0 4]
 [4 4 7 3 7 9]
 [7 3 7 1 5 2]] 

[[ 3 15  3  8 12 12]
 [19 12 13  0 19 16]
 [11  2 18 16  9 19]
 [19 15 15 11 13  2]
 [19 14  1  6 13 17]
 [19 14 19 14 13  3]
 [ 0  1 13  0 19 10]
 [19 13 19  5 16 13]
 [12  4 15 11 12 17]
 [ 4 19 17  2 11 12]
 [ 9 12 10  9 15  3]
 [13  7  2  5 13 10]]

所需的输出是

[[5 0 2 2 6 1]
 [4 8 9 2 7 2]
[ 3 15  3  8 12 12]
 [19 12 13  0 19 16]
 [11  2 18 16  9 19]
[5 5 0 5 3 0]
 [2 1 4 7 9 4]
[19 15 15 11 13  2]
 [19 14  1  6 13 17]
 [19 14 19 14 13  3]
[8 1 1 9 2 8]
 [4 1 1 0 1 1]
[ 0  1 13  0 19 10]
 [19 13 19  5 16 13]
 [12  4 15 11 12 17]
[2 9 3 5 7 9]
 [3 6 6 6 0 4]
[ 4 19 17  2 11 12]
 [ 9 12 10  9 15  3]
 [13  7  2  5 13 10]
[4 4 7 3 7 9]
 [7 3 7 1 5 2]

最佳答案

您可以创建一个输出数组并按索引将输入放入其中。输出总是

output = np.empty((x.shape[0] + y.shape[0], x.shape[1]), dtype=x.dtype)

您可以生成输出索引,例如:

idx = (np.arange(0, output.shape[0] - n + 1, m + n)[:, None] + np.arange(n)).ravel()
idy = (np.arange(n, output.shape[0] - m + 1, m + n)[:, None] + np.arange(m)).ravel()

这将创建一个起始索引的列向量,并添加 nm 步来标记输入所在的所有行。然后您可以直接分配输入:

output[idx, :] = x
output[idy, :] = y

关于python - 将两个 numpy 数组与连续行合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69137870/

相关文章:

csv - 如何从导入的 csv 文件中索引日期时间列 - pandas

python - IPython 2.x 中的计时和分析

python - 将 tensorflow 图实现到 Keras 模型中

python - 交换不相等列表切片的优雅方法?

python - 如何屏蔽张量中每一行的特定切片

string - PostgreSQL - 符号 ||| 是什么意思做?

python - 如何确定哪个小部件发出了信号

Python/numpy定位Runtime Warning

python - 使用 Pandas 和 Numpy 按 ID 索引查找比率的计算时间很长

mysql - SQL 将 table2 的行连接到 table1 的列