How to Solve Python ValueError: zero-dimensional arrays cannot be concatenated

by | Programming, Python, Tips

Introduction

When working with arrays in Python, especially with NumPy, you might encounter the ValueError: zero-dimensional arrays cannot be concatenated. This happens when trying to concatenate scalar values (zero-dimensional arrays) directly using numpy.concatenate(). Fortunately, there are alternative methods like hstack() and stack() that ensure inputs have the correct dimensions for concatenation.

Example to Reproduce the Error

Let’s go through an example to trigger the error:

import numpy as np

# Attempting to concatenate scalar values
np.concatenate([1, 2, 3, 4])

Output:

ValueError: zero-dimensional arrays cannot be concatenated

Here, we attempted to concatenate scalar values (1, 2, 3, 4) directly using np.concatenate(). Since scalars are zero-dimensional, NumPy throws an error because it can’t concatenate arrays with zero dimensions.

To avoid this error, we need to ensure that the values being concatenated have at least one dimension. One way to do this is by using functions like np.hstack() or np.expand_dims() that handle dimension adjustments automatically.

Solutions

1. Using np.hstack()

The hstack() function takes care of reshaping scalars into 1-dimensional arrays. It applies np.atleast_1d() internally, ensuring that all inputs have at least one dimension before concatenating them.

import numpy as np

# Using hstack to concatenate scalars
result = np.hstack([1, 2, 3, 4])

print(result)
print(type(result))

Output:

[1 2 3 4]
<class 'numpy.ndarray'>

Here, np.hstack() automatically converts the scalars into 1-dimensional arrays and then concatenates them successfully.

2. Using np.stack()

The stack() function is another alternative that can handle zero-dimensional arrays by explicitly specifying an axis along which to concatenate. It works similarly to hstack() but gives more control over the axis:

import numpy as np

# Using stack to concatenate scalars
result = np.stack([np.expand_dims(i, axis=0) for i in [1, 2, 3, 4]])

print(result)

Output:

[[1]
 [2]
 [3]
 [4]]

3. Using np.array()

For most situations, the cleanest way to handle scalars is by using np.array() to create an array from them in the first place, rather than concatenating individual scalars.

import numpy as np

# Create an array directly from scalars
result = np.array([1, 2, 3, 4])

print(result)

Output:

[1 2 3 4]

This is the most straightforward solution when you know you’re dealing with scalars and want to create an array from them.

Explanation of Dimensions in NumPy

It’s important to understand how dimensions work in NumPy arrays. When you create a scalar in NumPy:

scalar = np.array(1)
print(scalar.shape)

Output:

()

The output shows that scalar is a zero-dimensional array. Trying to concatenate this with higher-dimensional arrays results in an error, as shown in the previous example. When we convert scalars into 1-dimensional arrays, they can be concatenated without issues.

If you have multiple zero-dimensional arrays and wish to join them, consider what the resulting dimensionality will be. For example:

  • Joining four zero-dimensional arrays on a common axis will give you four 1-dimensional elements.
  • Joining four one-dimensional arrays can give you a 2D array (4, n) or (n, 4), depending on the axis.

Conclusion

The ValueError: zero-dimensional arrays cannot be concatenated in Python occurs when attempting to concatenate scalars using np.concatenate(). This error can be easily solved using either np.hstack(), np.stack(), or simply creating an array using np.array().

In most cases, directly creating arrays with np.array() or np.hstack() will be the most convenient options for avoiding this error.

Congratulations on reading to the end of this tutorial!

For further reading on arithmetic operations with NumPy arrays and dimensions/shapes of arrays, go to the articles:

Go to the online courses page on Python to learn more about coding in Python for data science and machine learning.

Have fun and happy researching!

Profile Picture
Research Scientist at Moogsoft | + posts

Suf is a research scientist at Moogsoft, specializing in Natural Language Processing and Complex Networks. Previously he was a Postdoctoral Research Fellow in Data Science working on adaptations of cutting-edge physics analysis techniques to data-intensive problems in industry. In another life, he was an experimental particle physicist working on the ATLAS Experiment of the Large Hadron Collider. His passion is to share his experience as an academic moving into industry while continuing to pursue research. Find out more about the creator of the Research Scientist Pod here and sign up to the mailing list here!