Błąd "shape mismatch" podczas rysowania wykresu

0

Dostaję błąd, gdy próbuję zrobić wykres.

ValueError: shape mismatch: objects cannot be broadcast to a single shape
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

lista_a = []
lista_b = []
lista_c = []

x = 123
result = 0

n = 16

for i in range(2**n):

    x = (x * 99 + 111) & 65535
    result = x

    if (i % 3) == 0:
        lista_a.append(result)
    if (i % 3) == 1:
        lista_b.append(result)
    else:
        lista_c.append(result)

x = lista_a
y = lista_b
z = lista_c

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

ax.scatter(x,y,z)

plt.show()

Myślałem, że chodzi o to, że listy nie mają równej wielkości, ale błąd występuje niezależnie od tego w jakim zakresie jest pętla.

1

A jakie zakresy testowałeś ? Bo 2^n to się kiepsko przez 3 dzieli...

0

Problem był, tak jak napisał @Bartłomiej Golenko w zakresie niepodzielnym przez 3, ale też w else na końcu. Gdy napiszemy tak:

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np

lista_a = []
lista_b = []
lista_c = []

x = 123
result = 0

n = 16

for i in range(2**n-1):

    x = (x * 99 + 111) & 65535
    result = x

    if (i % 3) == 0:
        lista_a.append(result)
    if (i % 3) == 1:
        lista_b.append(result)
    if (i % 3) == 2:
        lista_c.append(result)

x = lista_a
y = lista_b
z = lista_c

fig = plt.figure()

ax = fig.add_subplot(111, projection='3d')

ax.scatter(x,y,z)

plt.show()

To działa, nie wiem dlaczego na końcu nie może być else.

1

Pytanie "naprowadzające" - do którego if-a aplikuje się else? Co wykona się dla i==0 ?

Nawiasem mówiąc - 2**n-1 też niekoniecznie dzieli się przez 3 ;)

0
Bartłomiej Golenko napisał(a):

Pytanie "naprowadzające" - do którego if-a aplikuje się else? Co wykona się dla i==0 ?

Aha, no tak, w przypadku i == 0 dopisze też wynik do lista_c, bo else dotyczy tylko poprzedniego if-a.

Nawiasem mówiąc - 2**n-1 też niekoniecznie dzieli się przez 3 ;)

Fakt.

1 użytkowników online, w tym zalogowanych: 0, gości: 1