Python ValueError: setting an array element with a sequence
What is valueerror: setting an array element with a sequence?
A ValueError occurs when a function receives an argument of the correct type, but the value of the type is invalid. In this case, if the Numpy array is not in the sequence, you will get a Value Error.
If you look at the example, the numpy array is 2-dimensional, but at the later stage, we have mixed with single-dimensional array also, and hence Python detects this as an inhomogeneous shape that means the structure of the array varies, and hence Python throws value error.
#Numpy array of different dimensions import numpy as np print(np.array([[[1, 2], [3, 4], [5, 6]], [[1],[2]]], dtype=int)) # Output Traceback (most recent call last): File "c:\Projects\Tryouts\listindexerror.py", line 2, in print(np.array([[[1, 2], [3, 4], [5, 6]], [[1],[2]]], dtype=int)) ValueError: setting an array element with a sequence. The requested array has an inhomogeneous shape after 1 dimensions. The detected shape was (2,) + inhomogeneous part.
Solution – By creating the same dimensional array and having identical array elements in each array will solve the problem as shown below.
#Numpy array of same dimensions import numpy as np print(np.array([[[1, 2], [3, 4], [5, 6]]], dtype=int)) # Output [[[1 2] [3 4] [5 6]]]
The other possibility where you get Value Error would be when you try to create an array with different types of elements; for instance, consider the below example where we have an array with float and string mixed, which again throws valueerror: could not convert string to float.
# Mutliple data type and dtype as float import numpy as np print(np.array([55.55, 12.5, "Hello World"], dtype=float)) # Output Traceback (most recent call last): File "c:\Projects\Tryouts\listindexerror.py", line 2, in print(np.array([55.55, 12.5, "Hello World"], dtype=float)) ValueError: could not convert string to float: 'Hello World'
Solution – The solution of this is straightforward if you need either you declare only floating numbers inside an array or if you want both, then make sure that you change the dtype as an object instead of float as shown below.
# Changing the dtype as object and having multiple data type import numpy as np print(np.array([55.55, 12.5, "Hello World"], dtype=object)) # Output [55.55 12.5 'Hello World']
Check out the below examples for more use cases and best practices while working with numpy arrays.
import numpy numpy.array([1,2,3]) #good numpy.array([1, (2,3)]) #Fail, can't convert a tuple into a numpy #array element numpy.mean([5,(6+7)]) #good numpy.mean([5,tuple(range(2))]) #Fail, can't convert a tuple into a numpy #array element def foo(): return 3 numpy.array([2, foo()]) #good def foo(): return [3,4] numpy.array([2, foo()]) #Fail, can't convert a list into a numpy #array element
Как исправить: ValueError: установка элемента массива с последовательностью
Одна ошибка, с которой вы можете столкнуться при использовании Python:
ValueError : setting an array element with a sequence.
Эта ошибка обычно возникает, когда вы пытаетесь втиснуть несколько чисел в одну позицию в массиве NumPy.
В следующем примере показано, как исправить эту ошибку на практике.
Как воспроизвести ошибку
Предположим, у нас есть следующий массив NumPy:
import numpy as np #create NumPy array data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Теперь предположим, что мы пытаемся втиснуть два числа в первую позицию массива:
#attempt to cram values '4' and '5' both into first position of NumPy array data[0] = np.array([4,5]) ValueError : setting an array element with a sequence.
Ошибка говорит нам, что именно мы сделали неправильно: мы попытались установить один элемент в массиве NumPy с последовательностью значений.
В частности, мы попытались втиснуть значения «4» и «5» в первую позицию массива NumPy.
Это невозможно сделать, поэтому мы получаем ошибку.
Как исправить ошибку
Способ исправить эту ошибку — просто присвоить одно значение первой позиции массива:
#assign the value '4' to the first position of the array data[0] = np.array([4]) #view updated array data array([ 4, 2, 3, 4, 5, 6, 7, 8, 9, 10])
Обратите внимание, что мы не получаем никаких ошибок.
Если мы действительно хотим присвоить два новых значения элементам массива, нам нужно использовать следующий синтаксис:
#assign the values '4' and '5' to the first two positions of the array data[0:2] = np.array([4, 5]) #view updated array data array([ 4, 5, 3, 4, 5, 6, 7, 8, 9, 10])
Обратите внимание, что первые два значения в массиве были изменены, а все остальные значения остались прежними.
Дополнительные ресурсы
В следующих руководствах объясняется, как исправить другие распространенные ошибки в Python: