【问题标题】:How to concatenate using numpy? [duplicate]如何使用 numpy 进行连接? [复制]
【发布时间】:2020-07-15 08:43:54
【问题描述】:

我有两个数组,第一个是(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

谁能帮我解决这个问题?

【问题讨论】:

  • 您的问题不是连接,而是调整大小(请阅读错误消息)。你甚至想通过调整大小来实现什么?您可以通过Y[:, np.newaxis] 将Y 转换为2D(一列),然后通过np.hstack((X, Y[:, np.newaxis])) 将它们水平堆叠。

标签: python arrays numpy concatenation


【解决方案1】:

最简单的方法是:

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

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

例子:

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)很好。
【解决方案2】:

您的错误在于数组的形状。 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)

祝你好运

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 2011-12-13
    • 2015-03-20
    相关资源
    最近更新 更多