如何使用numpy进行数组拼接?

4

我有两个数组,第一个数组是(n行, 6列),叫做X

[[ 0.2    7.7   -6.2   0.4  9.6  -2.4]
 [ 0.1    7.2   -6.3   0.4  9.5  -2.1]
 [ 0.02   7.9   -5.8   0.2  9.1  -3.5]
 ...
 [-3.6    7.9   -5.3  -0.7  9.4  -0.4]
 [-1.2    8.8   -4.1  -0.4  9.8   0.9]
 [-1.2    9.6    1.2  -1.0  9.8   1.6]]

第二个是(n个元素),即 Y:
[100. 101. 102. 103. 100. 100. 100. 100. 100. 100. 100. 100. 100. 100.
 100. 100. 100. 100. 100. 100. 100. 101. 101. 101. 101. 101. 101. 101.
 ...
 105. 105. 105. 105. 105. 105. 105. 105. 105. 105. 105. 105. 105. 105.
 105. 107. 108. 109.]

我希望有第三个C数组(n行,7列),例如Z

[[ 0.2    7.7   -6.2   0.4  9.6  -2.4  100.]
 [ 0.1    7.2   -6.3   0.4  9.5  -2.1  101.]
 [ 0.02   7.9   -5.8   0.2  9.1  -3.5  102.]
 ...
 [-3.6    7.9   -5.3  -0.7  9.4  -0.4  107.]
 [-1.2    8.8   -4.1  -0.4  9.8   0.9  108.]
 [-1.2    9.6    1.2  -1.0  9.8   1.6  109.]]

我有这段代码来完成它:
import numpy as np

Y.resize((2, 1))
Z = np.concatenate((X, Y), axis=1)

但是我收到了以下错误信息:

Y.resize((2, 1))
ValueError: resize only works on single-segment arrays

有人能帮我修复这个问题吗?


3
你的问题不在于拼接(concatenate),而是在于调整大小(resize)(请阅读错误信息)。你想用调整大小做什么?你可以通过 Y[:, np.newaxis] 将Y转换为2D数组(一个列向量),然后通过 np.hstack((X, Y[:, np.newaxis])) 水平堆叠它们。 - Niklas Mertsch
2个回答

4

最简单的方法是:

Z = np.hstack((X,Y[:,None]))

Y[:,None] 将一个维度添加到 Yhstack 则将它们水平堆叠。

示例:

X=np.ones((3,6))
#[[1. 1. 1. 1. 1. 1.]
# [1. 1. 1. 1. 1. 1.]
# [1. 1. 1. 1. 1. 1.]]
Y = np.zeros(3)
#[0. 0. 0.]

Z:

[[1. 1. 1. 1. 1. 1. 0.]
 [1. 1. 1. 1. 1. 1. 0.]
 [1. 1. 1. 1. 1. 1. 0.]]

关键的改进是 Y[:,None]。OP 的 concatenate(...., axis=1) 是可以的。 - hpaulj

1
你的错误在于数组的形状。X的形状为(n, 7),而Y的形状为(n, )。尝试将Y的形状更改为(n, 1),并沿axis = 1进行连接。这里有一个小例子。
import numpy as np

X = np.array([[1, 2, 5],
              [3, 4, 6]])
Y = np.array([[7, 8]]).reshape(2, 1)
Z = np.concatenate((X, Y), axis=1)

祝你好运


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