小能豆

ValueError: all the input arrays must have same number of dimensions . Stacking vectors

py

我有三个数组需要附加。下面是我的向量示例:

V1=array([ 0.03317591, -0.01624349, -0.01151019])
V2=array([[ 0.06865846, -0.00223798],
       [-0.02872752, -0.00369226],
       [-0.02063454, -0.00231726]])
V3=
array([[ 0.01160267,  0.12610824, -0.01634712,  0.01217519],
       [-0.00727594, -0.0501376 , -0.01641992,  0.00933081],
       [-0.05305551,  0.01195211,  0.04031831, -0.04476306]])

为了附加三个向量并得到一个向量,我执行以下操作:

new_v=np.hstack((V1,V2,V3))

我收到以下错误:

ValueError: all the input arrays must have same number of dimensions

然而 :

 V2_V3=np.hstack((V2,V3))

有效,它返回:

array([[ 0.06865846, -0.00223798,  0.01160267,  0.12610824, -0.01634712,
         0.01217519],
       [-0.02872752, -0.00369226, -0.00727594, -0.0501376 , -0.01641992,
         0.00933081],
       [-0.02063454, -0.00231726, -0.05305551,  0.01195211,  0.04031831,
        -0.04476306]])

我想要获得以下内容:

array([[0.03317591, 0.06865846, -0.00223798,  0.01160267,  0.12610824, -0.01634712,
         0.01217519],
       [-0.01624349, -0.02872752, -0.00369226, -0.00727594, -0.0501376 , -0.01641992,
         0.00933081],
       [-0.01151019, -0.02063454, -0.00231726, -0.05305551,  0.01195211,  0.04031831,
        -0.04476306]])

V1 有什么问题?


阅读 15

收藏
2024-12-11

共1个答案

小能豆

在你的代码中,问题出在 V1 的形状上。V1 是一个一维数组,而 V2V3 是二维数组。np.hstack() 需要拼接的数组维度必须相同,因此你收到 ValueError: all the input arrays must have same number of dimensions 错误。

要解决这个问题,首先需要将 V1 转换成一个二维数组,使其能够与 V2V3 进行拼接。你可以将 V1 转换为一个形状为 (n, 1) 的二维数组,其中 n 是元素的个数。这样,V1 就会变成一个列向量,能够与 V2V3 对齐进行拼接。

可以这样修改代码:

import numpy as np

V1 = np.array([0.03317591, -0.01624349, -0.01151019])
V2 = np.array([[0.06865846, -0.00223798],
               [-0.02872752, -0.00369226],
               [-0.02063454, -0.00231726]])
V3 = np.array([[0.01160267, 0.12610824, -0.01634712, 0.01217519],
               [-0.00727594, -0.0501376 , -0.01641992, 0.00933081],
               [-0.05305551, 0.01195211, 0.04031831, -0.04476306]])

# Convert V1 to a column vector
V1 = V1[:, np.newaxis]

# Now you can stack them horizontally
new_v = np.hstack((V1, V2, V3))

print(new_v)

解释:

  • V1[:, np.newaxis] 会将 V1 转换为一个列向量,即形状从 (3,) 变为 (3, 1)
  • 使用 np.hstack()V1V2V3 按列拼接成一个二维数组。

输出结果:

array([[ 0.03317591,  0.06865846, -0.00223798,  0.01160267,  0.12610824,
        -0.01634712,  0.01217519],
       [-0.01624349, -0.02872752, -0.00369226, -0.00727594, -0.0501376 ,
        -0.01641992,  0.00933081],
       [-0.01151019, -0.02063454, -0.00231726, -0.05305551,  0.01195211,
         0.04031831, -0.04476306]])

现在,V1 被正确地转换为一个列向量,并且与你的 V2V3 进行了水平拼接,得到了你想要的输出。

2024-12-11