Создание 3d матрицы из 2 списков

#python #python-3.x #numpy #matplotlib

#python #python-3.x #numpy #matplotlib

Вопрос:

У меня есть два списка значений, x и y:

 index = np.arange(-1,1,0.01)
x = index
y = index
  

Из этого списка я хочу создать 3d график, для этого мне нужен z, для которого у меня в настоящее время есть следующий код:

 z = []
for i in x:
    temp_list = []
    for i2 in y:
        temp_list.append(-(i**2 i2**2))
    z.append(temp_list)
  

С помощью этих данных я могу сгенерировать следующий график:
введите описание изображения здесь

Вопрос:

Как я могу сгенерировать список z с формой (len(x), len(y)) только с помощью методов numpy, а не с помощью этой итерации, которую я делаю в моем примере?

1 для однолинейных

Ответ №1:

Использование широковещательной передачи:

 import numpy as np

index = np.arange(-1, 1, 0.1)

Z = -(index[:,None] ** 2   index[None, :] ** 2)
  

Таким образом, вы можете избежать использования np.meshgrid . Если оси не совпадают, вы должны использовать это следующим образом:

 Z = -(x_axis[:,None] ** 2   y_axis[None, :] ** 2)
  

Ответ №2:

Вы можете использовать numpy.meshgrid для генерации координат x-y из index :

 import numpy as np

index = np.arange(-1, 1, 0.1)
x, y = np.meshgrid(index, index)

z = -(np.square(x)   np.square(y))