ошибка 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()

Результат: введите сюда описание изображения

→ Ссылка