【问题标题】:python valueError using hstack() (ValueError: all the input array dimensions except for the concatenation axis must match exactly)python valueError using hstack() (ValueError:除连接轴外的所有输入数组维度必须完全匹配)
【发布时间】:2017-11-26 21:57:50
【问题描述】:

我收到以下错误:

Traceback (most recent call last):
File "/home/odroid/trackAndFollow/getPositions.py", line 34, in 
<module>
tfVeloToCamera = np.hstack((np.vstack((rmVeloToCamera, 
zero_array)),np.transpose(translationVector_veloToCamera)))
File "/usr/lib/python2.7/dist-packages/numpy/core/shape_base.py", line 
280, in hstack
return _nx.concatenate(arrs, 1)
ValueError: all the input array dimensions except for the 
concatenation axis must match exactly

代码:

rotationVector_veloToCamera = 
np.array([[[-1.77611954,0.30024612,0.76069987]]])
translationVector_veloToCamera = np.array([[ 
0.0146381,0.02553223,0.16231193]])

rmVeloToCamera,jac = cv2.Rodrigues(rotationVector_veloToCamera)
tfVeloToCamera = np.hstack((np.vstack((rmVeloToCamera, 
zero_array)),np.transpose(translationVector_veloToCamera)))

我在某处读到原因是形状或 dtype.. hstack 内 2 个变量的形状为 (4,3) (3,1) 并且两者都有 dtype=float64。

知道是什么原因造成的吗?

【问题讨论】:

    标签: python numpy


    【解决方案1】:

    如果您尝试堆叠的数组的形状是(4, 3)(3, 1),那么它们没有任何匹配的数组维度,如4 != 33 != 1。如果您要对第一个进行转置,给出尺寸(3, 4)(3, 1),它们应该堆叠。

    np.hstack((np.zeros((4, 3)), np.zeros((3,1))))
    Traceback (most recent call last):
    ...
    ValueError: all the input array dimensions except for the concatenation axis must match exactly
    
    np.hstack((np.zeros((4, 3)).T, np.zeros((3,1))))
    Out[56]: 
    array([[ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.],
           [ 0.,  0.,  0.,  0.,  0.]])
    

    顺便说一句,您可能希望转而使用 np.concatenate 并指定轴,而不是 np.vstacknp.hstack

    例如:

    np.concatenate((np.zeros((4, 3)), np.zeros((3,1)).T), axis=0)
    Out[20]: 
    array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.],
           [ 0.,  0.,  0.],
           [ 0.,  0.,  0.],
           [ 0.,  0.,  0.]])
    

    【讨论】:

    • 我转置了第二个,现在它们是 (4,3) 和 (1,3)。根据你的解释,这应该从 3=3 开始工作,但我仍然得到同样的错误..
    • @Drak 我本来可以更清楚的;我会考虑如何编辑。您仍在使用hstack,它只检查第一个轴是否匹配。 vstack 只检查第二个,dstack 第三个。您可以使用vstack,或者更好的是,使用stack 并指定axis=1 作为参数。
    • 我试过stack,它对我不起作用。我让它与hstackvstack 一起工作(结果我错过了.T)。你能用不同的axis=选项解释numpy.stack吗?
    • @Drak 因为看起来我给出了错误的功能。 np.concatenate 是如果要组合的轴已经存在的话。已编辑。
    猜你喜欢
    • 2018-07-08
    • 2021-05-09
    • 2020-02-19
    • 2017-10-20
    • 2019-05-16
    • 2020-07-25
    • 2020-02-03
    • 2020-08-02
    • 2018-06-23
    相关资源
    最近更新 更多