Ошибка: значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()
1394 просмотра
3 ответа
4 Репутация автора
import numpy as np
import matplotlib.pyplot as plt
import scipy
from scipy import interpolate
m_c,p_s,complete = np.loadtxt('File1.txt',usecols=(1,0,2),unpack=True)
p_d,m_d = np.loadtxt('File2.txt',usecols=(2,3),unpack=True)
p_c,m_c = np.loadtxt('File3.txt',usecols=(1,2),unpack=True)
def function_oc(m_c,p_c,complete,min,max):
average = 0
comp = []
x = 0
while x<8000:
if p_c[x]<50 and m_c[x]>=min and m_c[x]<=max:
comp.append(complete[x])
x+=1
average = sum(comp)/len(comp)
return average
average1 = function_oc(m_c,p_c,complete,3,10)
average2 = function_oc(m_c,p_c,complete,10,30)
average3 = function_oc(m_c,p_c,complete,30,100)
average4 = function_oc(m_c,p_c,complete,100,300)
average5 = function_oc(m_c,p_C,complete,300,1000)
def function_pc(m_d,p_d,m_c,p_c,complete):
f= interpolate.interp2d(m_c,p_c,complete)
comp_d = f(p_d,m_d)
return comp_d
comp_d = function_pc(m_d,p_d,m_c,p_c,complete)
def function_d(p_d,m_d,min,max):
d = 0
i = 0
while i<33:
if p_d[i]<50 and m_d[i]>=min and m_d[i]<=max:
d+=1
i+=1
return d
d1 = function_d(p_d,m_d,3,10)
d2 = function_d(p_d,m_d,10,30)
d3 = function_d(p_d,ms_d,30,100)
d4 = function_d(p_d,m_d,100,300)
d5 = function_d(p_d,m_d,300,1000)
def function_c(p_c,m_c,min,max):
c = 0
y = 0
while y<12:
if p_c[y]<50 and m_C[y]>=min and m_C[y]<=max:
c+=1
y+=1
return c
c1 = function_c(p_c,m_c,3,10)
c2 = function_c(p_c,m_c,10,30)
c3 = function_c(p_c,m_c,30,100)
c4 = function_c(p_C,m_c,100,300)
c5 = function_c(p_C,m_c,300,1000)
####Missed planets in each bin####
def function_m(c_d,p_d,m_d,min,max):
m=0
for mi in range(len(comp_d)):
if p_d[mi]<50 and m_d[mi]>=min and ms_d[mi]<=max:
m += 1/comp_d[mi] - 1
return m
m1 = function_m(comp_d,p_d,m_d,3,10)
m2 = function_m(comp_d,p_dd,m_d,10,30)
m3 = function_m(comp_d,p_d,m_d,30,100)
m4 = function_m(comp_d,p_d,m_d,100,300)
m5 = function_m(comp_d,p_d,m_d,300,1000)
occ1 = (d1+c1+m1)/average1
occ2 = (d2+c2+m2)/average2
occ3 = (d3+c3+m3)/average3
occ4 = (d4+c4+m4)/average4
occ5 = (d5+c5+m5)/average5
N = 5
dp = (d1, d2, d3, d4, d5)
cp = (c1, c2, c3, c4, c5)
mp = (m1, m2, m3, m4, m5)
planets = (dp, cp, mp)
ind = np.arange(N)
width = 0.9
p1 = plt.bar(ind, dp, width, color='red')
p2 = plt.bar(ind, cp, width, color='blue', bottom=dp)
p3 = plt.bar(ind, mp, width, color='yellow', bottom=[i+j for i,j in zip(dp, cp)])
plt.legend((p1[0], p2[0], p3[0]), ('DP', 'CP', 'MP'))
plt.show()
Я не понимаю, почему я получаю эту ошибку для моего кода:
ValueError: Значение истинности массива с более чем одним элементом неоднозначно. Используйте a.any () или a.all ()
Строка в коде, который вызывает эту проблему:
p3 = plt.bar(ind, mp, width, color='yellow', bottom=[i+j for i,j in zip(dp, cp)])
Автор: Rachel Fernandes
Источник
Размещён: 25.07.2017 08:05
Ответы (3)
1 плюс
106 Репутация автора
Вы получаете эту ошибку, потому что вы пытаетесь построить массив вместо точки, используя plt.bar
. Т.е. вы пытаетесь построить график ind[0]
против dp[0]
= dp1
, который является массивом. Если вы хотите сделать это, вы должны использовать plt.bar
для каждой точки в массиве.
Вы должны использовать plt.bar
для каждого элемента в каждом элементе dp
, так что для dp[i][j]
.
1 плюс
7768 Репутация автора
Эта ошибка возникает, когда вы делаете что-то вроде:
if a < b:
когда a
или b
является массивом.
Я не могу отследить, где это может быть, так как у меня нет ваших входных текстовых файлов (и вы не предоставили полную трассировку ошибок), но у вас есть много if
утверждений, которые являются потенциальными виновниками.
Проблема в том, что a < b
в случае массива разрешается массив массив логических значений, например,
array([True, True, False])
который if
не может разобрать. np.any
и np.all
будет анализировать массив логических значений, согласно моему примеру, True
для np.any
и False
для np.all
.
0 плюса
1 Репутация автора
Вы должны использовать:
np.logical_or(a,b)
np.logical_and(a,b)
для массивов np. Это работает очень хорошо для меня!
Автор: Hao Xu Размещён: 11.08.2019 08:50Вопросы из категории :
- python Обработка XML в Python
- python Как я могу использовать Python itertools.groupby ()?
- python Python: На какой ОС я работаю?
- python Как я могу создать непосредственно исполняемое кроссплатформенное приложение с графическим интерфейсом на Python?
- python Вызов функции модуля с использованием его имени (строки)
- python Звук Питона («Колокол»)
- python Regex и unicode
- python Создать зашифрованный ZIP-файл в Python
- python Создайте базовый итератор Python
- python Функция транспонирования / распаковки (обратная сторона zip)?
- numpy python.array против numpy.array
- numpy Как преобразовать изображение PIL в массив Numpy?
- numpy Есть ли функция NumPy, чтобы вернуть первый индекс чего-то в массиве?
- numpy Как мне создать пустой массив / матрицу в NumPy?
- numpy Как я могу использовать numpy.correlate для автокорреляции?
- numpy Какой самый простой способ расширить массив пустышек в 2 измерениях?
- numpy Как рассчитать r-квадрат, используя Python и Numpy?
- numpy Сохранение массива Numpy в виде изображения
- numpy Определить, содержит ли массив NumPy хотя бы одно нечисловое значение?
- numpy Каковы преимущества NumPy перед обычными списками Python?