ошибка shape mismatch
у меня есть массив который представляет из себя
[[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
...
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]
[0 0 0 ... 0 0 0]]
между нулями там еще много чисел. Когда я подаю этот массив в свой код то сталкиваюсь с ошибкой: shape mismatch: objects cannot be broadcast to a single shape. вот код который я использую:
z = b_line #b_line представляет из себя массив указанный выше
x = np.outer(np.linspace(0, len(z), len(z[0])), np.ones(len(z[0])))
y = x.copy().T # transpose
z = np.array(z)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,cmap='viridis', edgecolor='none')
ax.set_title('Surface plot')
plt.show()
Ответы (2 шт):
Автор решения: passant
→ Ссылка
Почему вы не приводите воспроизводимый фрагмент кода? Нам остается только догадываться, что вы там написали или забыли написать.
Поскольку ваш код вы от нас скрыли, то есть сильное подозрение, что вы забыли вставить
from mpl_toolkits.mplot3d import Axes3D
Вот так ваш код выглядит у меня:
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
b_line=[[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
z = b_line #b_line представляет из себя массив указанный выше
x = np.outer(np.linspace(0, len(z), len(z[0])), np.ones(len(z[0])))
y = x.copy().T # transpose
z = np.array(z)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(x, y, z,edgecolor='none',cmap='viridis')
ax.set_title('Surface plot')
plt.show()
Как видите, все работает.
Автор решения: passant
→ Ссылка
После долгих разборок, могу предложить следующий, классический вариант, который работает для произвольных матриц
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
b_line=[
[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0],
[0, 0, 0, 1, 0, 0]
]
z = b_line #b_line представляет из себя массив указанный выше
x=np.linspace(0, len(z), len(z[0]))
y=np.linspace(0, len(z[0]),len(z))
X,Y=np.meshgrid(x,y)
z = np.array(z)
fig = plt.figure()
ax = plt.axes(projection='3d')
ax.plot_surface(X, Y, z)
ax.set_title('Surface plot')
plt.show()

