我有两个 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()
这将创建一个起始索引的列向量,并添加 n
或 m
步来标记输入所在的所有行。然后您可以直接分配输入:
output[idx, :] = x
output[idy, :] = y
关于python - 将两个 numpy 数组与连续行合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69137870/