несоответствие формы: объекты не могут быть переданы в одну форму - PullRequest
0 голосов
/ 03 ноября 2019

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

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import axes3d
g1 = (transformed[0:numberOfHockey,0],transformed[numberOfHockey:numberOftrees,0],transformed[numberOftrees:,0])
g2 = (transformed[0:numberOfHockey,1],transformed[numberOfHockey:numberOftrees,1],transformed[numberOftrees:,1])
g3 = (transformed[0:numberOfHockey,2],transformed[numberOfHockey:numberOftrees,2],transformed[numberOftrees:,2])

data = (g1, g2, g3)
colors = ("red", "green", "blue")
groups = ("Hockey", "Tree", "movies") 

# Create plot
fig = plt.figure()
ax = fig.add_subplot(1, 1, 1)
ax = fig.gca(projection='3d')

for data, color, group in zip(data, colors, groups):
    x, y, z = data
    ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group)

plt.title('Matplot 3d scatter plot')
plt.legend(loc=2)
plt.show()

Здесь transfomed - это матрица примеров. каждый пример имеет три особенности. Это данные с уменьшенным размером с использованием PCA. Я использовал scikit научиться делать PCA. Однако я получаю следующую ошибку:

ValueError                                Traceback (most recent call last)
<ipython-input-13-0e3c4126607f> in <module>
     93 for data, color, group in zip(data, colors, groups):
     94     x, y, z = data
---> 95     ax.scatter(x, y, z, alpha=0.8, c=color, edgecolors='none', s=30, label=group)
     96 
     97 plt.title('Matplot 3d scatter plot')

/opt/conda/lib/python3.6/site-packages/mpl_toolkits/mplot3d/axes3d.py in scatter(self, xs, ys, zs, zdir, s, c, depthshade, *args, **kwargs)
   2298 
   2299         xs, ys, zs = np.broadcast_arrays(
-> 2300             *[np.ravel(np.ma.filled(t, np.nan)) for t in [xs, ys, zs]])
   2301         s = np.ma.ravel(s)  # This doesn't have to match x, y in size.
   2302 

/opt/conda/lib/python3.6/site-packages/numpy/lib/stride_tricks.py in broadcast_arrays(*args, **kwargs)
    257     args = [np.array(_m, copy=False, subok=subok) for _m in args]
    258 
--> 259     shape = _broadcast_shape(*args)
    260 
    261     if all(array.shape == shape for array in args):

/opt/conda/lib/python3.6/site-packages/numpy/lib/stride_tricks.py in _broadcast_shape(*args)
    191     # use the old-iterator because np.nditer does not handle size 0 arrays
    192     # consistently
--> 193     b = np.broadcast(*args[:32])
    194     # unfortunately, it cannot handle 32 or more arguments directly
    195     for pos in range(32, len(args), 31):

ValueError: shape mismatch: objects cannot be broadcast to a single shape
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...