«builtin_function_or_method’ объект не имеет атрибута ‘reshape'» что это значит?

#python #arrays #numpy

#python #массивы #numpy

Вопрос:

Я новичок, поэтому этот вопрос может быть несколько очевидным для кого-то.

 import numpy as np
print("array")
array = np.arange(8)
matrix = np.array.reshape(2,4)
print(matrix)
  

Результат таков.

 array
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-4-88e5e9409344> in <module>
      2 print("array")
      3 array = np.arange(8)
----> 4 matrix = np.array.reshape(2,4)
      5 print(matrix)

AttributeError: 'builtin_function_or_method' object has no attribute 'reshape'
  

Я не знаю, почему это не работает.

Комментарии:

1. Похоже, что вы вызываете reshape np.array функцию , которая используется для создания нового массива. Вы создали свою переменную array . Попробуйте использовать эту переменную вместо np.array : matrix = array.reshape(2,4)

2. @UeliDeSchwert Спасибо! Это действительно работает! Нет ли необходимости ставить ‘np’ перед ‘array’? Почему?

3. np. Идентифицирует функции в numpy модуле. Существует np.array функция. И чтобы уменьшить вашу путаницу, измените имена переменных. Например arr = np.arange(3) , или x = np.arange(6).reshape(2,3) . Избегайте имен, которые слишком похожи на существующие функции.

Ответ №1:

Похоже, вы вызываете reshape on np.array , функцию, которая используется для создания нового массива.

Вы уже создали свою переменную array . Попробуйте использовать эту переменную вместо np.array :

 import numpy as np
print("array")
array = np.arange(8)
matrix = array.reshape(2,4) # <-- remove the "np." to access a function on your array
print(matrix)
  

Почему это так?

myArray = np.array(k) это функция, которая создает новый массив NumPy, используя входные k данные . Результат этой функции возвращается и сохраняется в переменной (в моем случае myArray ).

В этом массиве вы можете вызывать функции для управления им (например reshape ).

Что вы пытались сделать: Вы использовали np.array (помните, функцию, которая создает массив). Вы не использовали свой массив, а вместо этого использовали указатель на функцию.

Комментарии:

1. то есть вы имеете в виду, что, поскольку я уже создал массив, мне не нужно вводить ‘np’ для создания матрицы?

2. Я обновил свой ответ. Возможно, это делает его более понятным.