У меня есть три массива равной длины с именем ra, ma и op, в основном числа и несколько экземпляров, когда у них есть «nan» или «None» вместо номера. Например:Python: ошибка при построении трехмерного графика из 3 массивов
ra = [0, 1, 2, nan, 8 , 3, 8, 5]
ma = [3, nan, 5, 8, 9, 6, 4, 10]
op = [7, None, 7, 9, 3, 6, None, 7]
Я хочу сделать 3d график чисел в них. Мой код:
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(ra,ma,op)
plt.show()
Все хорошо, пока я печатаю plt.show() - то это дает мне длинный список ошибок, который заканчивается так:
"TypeError: unsupported operand type(s) for /: 'NoneType' and 'NoneType'".
Может быть: Это из-за значений nan, но я не знаю, как их удалить: - Если я хочу удалить значение nan из ra (что является 4-м значением списка), мне также придется удалить соответствующие 4-е значения из ma и op. И я не могу понять, как это сделать, или если нам вообще нужно это делать.
Может кто-нибудь указать, где я иду не так?
Ошибка довольно ясна; это не * жалуется на 'nan', а на' None'. – Bakuriu
Можно ли удалить значения None из списка «op», а также удалить соответствующие значения из «ra» и «ma»? Я имею в виду, это должно быть возможно, но я не знаю, как поставить цикл for, чтобы рассмотреть все эти три массива. – Panchi
Использование 'itertools.compress' довольно просто:' op, ma, ra = zip (* compress (zip (op, ma, ra), op)) '(это предполагает, что' op' не содержит нулей. В противном случае замените 'op' на' (x не является None для x в op) '. Использование явного цикла вы можете сделать 'для a, b, c в zip (ra, ma, op)' проверить, если 'c не является None', в этом случае вставьте' a', 'b' и' c' в некоторые новые списки. – Bakuriu