Ошибка при построении контура с помощью matplotlib - PullRequest
0 голосов
/ 30 декабря 2018

Я пытаюсь построить такую ​​функцию.Однако следующий код вызовет ошибку.Я думаю, что причина в том, что скалярное значение возвращается в norm (), но как его можно решить? function

Метка изображения представляет формулу определения,пространство поиска, оптимальное решение слева

import numpy as np
import matplotlib.pyplot as plt

x = np.arange(-5, 5, 0.05) 
y = np.arange(-5, 5, 0.05) 

X ,Y= np.meshgrid(x, y)
print(X)
c1 = -2 * np.ones((2,200,200))
c2 = 4 * np.ones((2,200,200))
print(np.linalg.norm(np.array([X,Y]) - c1))
Z = (1 - 1 / (1 * np.linalg.norm(np.array([X,Y]) - c1) + 1)) + (1 - 1 / (2 * 
np.linalg.norm(np.array([X,Y]) - c2) + 1))
plt.pcolormesh(X, Y, Z,cmap='hsv') 
plt.show()

1 Ответ

0 голосов
/ 30 декабря 2018

Проблема в том, что ваш текущий Z не имеет такого же размера, как ваши X и Y.Это можно проверить, напечатав формы X, Y и Z. Причина в том, что вы не указали axis при вычислении norm в вашем уравнении и, следовательно, вы получили скалярное значение.Вы можете обратиться к Официальным документам для получения дополнительной информации о том, как работает аргумент axis.В вашем случае, поскольку вы не указали никакого значения для axis, он возвращал вам матричную норму вместо векторной нормы

Ниже приведенорешение, в котором вы предоставляете axis=0 для правильного вычисления нормы для столбцовых комбинаций ввода ваших X и Y

Z = (1 - 1 / (1 * np.linalg.norm(np.array([X,Y]) - c1, axis=0) + 1)) + (1 - 1 / (2 *np.linalg.norm(np.array([X,Y]) - c2,  axis=0) + 1))
plt.pcolormesh(X, Y, Z,cmap='hsv') 

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...