In this article we will provide you Python code example to resolve valueerror: all the input array dimensions except for the concatenation axis must match exactly. This error occurs due to unmatched dimensions of arrays on which np.concatenate() is running.
Why this error is raised by Python?
This is more a mathematical error than a Python specific one. If you concatenate two matrixes, they need to have same dimensions. For example –
matrix1 = [[1, 2], [3, 4], [5, 6]] matrix2 = [[7, 8, 9]]
We have matrix1
of dimension 3×2 and matrix2
of 1×3. There are two ways to concatenate these matrixes – On the row axis and on column axis.
If we try to concatenate over row axis, this will happen –
[[1, 2, ?], [3, 4, ?], [5, 6, ?], [7, 8, 9]]
This is not acceptable to the core of mathematics. You can’t just concatenate to a row and leave all other rows without data for those extra indexes.
If we try to concatenate over column axis, then –
[[1, 2, 7], [3, 4, 8], [5, 6, 9]]
This is valid and acceptable.
Code Example
Error Code – Let’s first reproduce the error –
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[7, 8]]) print(np.concatenate((a, b), axis=0))
This code will throw the valueerror: all the input array dimensions except for the concatenation axis must match exactly. Here is the complete output –
Traceback (most recent call last): File "concatenate_error.py", line 5, in <module> print(np.concatenate((a, b), axis=0)) ValueError: all the input array dimensions except for the concatenation axis must match exactly
a
has 3 columns while b
has 2. So, you cannot concatenate them over row (axis=0). But you can concatenate them over columns.
Solution
1. Change the dimension of b
array –
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[7, 8, 9]]) print(np.concatenate((a, b), axis=0))
Output –
[[1 2 3] [4 5 6] [7 8 9]]
2. Or, you can concatenate over axis=1
but need to transpose first –
import numpy as np a = np.array([[1, 2, 3], [4, 5, 6]]) b = np.array([[7, 8]]) print(np.concatenate((a, b.T), axis=1))
Output –
[[1 2 3 7] [4 5 6 8]]