ValueError: all the input arrays must have same nu

2019-03-04 00:18发布

l have three arrays to append. Here a sample of my vectors :

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]])

in order to append the three vectors and get one vector l did the following :

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

l got the following error :

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

However :

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

works, it returns :

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]])

What l would like to get is the following :

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]])

What is wrong with V1 ?

2条回答
放荡不羁爱自由
2楼-- · 2019-03-04 01:04

To use np.hstack, we need to convert V1 to 2D such that the lengths along the first axis for the three input arrays are the same -

np.hstack((V1[:,None],V2,V3))

As alternatives, we can use np.column_stack or np.concatenate along the second axis on 2D converted V1 alongwith others or np.c_ -

np.column_stack((V1,V2,V3))
np.concatenate([V1[:,None],V2,V3],axis=1)
np.c_[V1,V2,V3]
查看更多
Explosion°爆炸
3楼-- · 2019-03-04 01:15

There's nothing wrong with V1 except that it's 1D while V2 and V3 are 2D. According to the docs for hstack, all the input arrays have to have the same shape on all except the second axis. V1 in your code doesn't have a second axis.

You can easily add an empty second axis to V1 during your call to hstack like this:

new_v = hstack((V1[:, None], V2, V3))

That should achieve your desired output.

Note: The V1[:, None] bit is one of three ways that NumPy has available to add empty dimensions to arrays. The other two are V1[:, np.newaxis] and the function version np.expand_dims(V1, axis=1).

You could use any of these in place of V1[:, None] in that line of code and it would work. Check out the docs for numpy.expand_dims for more on adding dimensions to arrays.

查看更多
登录 后发表回答