Использование файла данных CSV для сокращения длины кода приводит к ошибке a.all () или a.any () - PullRequest
0 голосов
/ 27 апреля 2018

Я написал следующий код. для быстрого запуска и инструктажа я записываю матрицу 31*31 в файл csv, как мы видим в CovSN. Интересно, как мне сделать это для xx и yy, чтобы удалить for loop и f_list[] в def SN(Om, A, al, M):, чтобы написать что-то вроде:

def dL(Om, A, al, M):   
    q_sn = quad(ant, 0, za, args=(Om,  A, al))[0]      
    h = 5 * log10( (1+za) * q_sn)  
    fn = (mua - M - h)            
    return fn

def SN(Om, A, al, M):
     sn= np.dot(dL(Om, A, al, M), np.dot(cova, dL(Om, A, al, M))
     return sn

Но Python получает ошибку, когда я делаю эту замену

if (b != Inf and a != -Inf): alueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all(). >>>

код

import numpy as np
from math import *
from scipy.integrate import quad
from scipy.integrate import odeint
import pandas as pd

xx=np.array([0.01,0.012,0.014,0.016,0.019,0.023,0.026,0.031,0.037,0.043,
            0.051,0.06,0.07,0.082,0.097,0.114,0.134,0.158,0.186,0.218,
            0.257,0.302,0.355,0.418,0.491,0.578,0.679,0.799,0.94,1.105,1.3])

yy=np.array([32.95388698,33.87900347,33.84214074,34.11856704,34.59344598,
            34.93902653,35.25209633,35.74850165,36.06978761,36.43457047,
            36.65111059,37.15801411,37.43017325,37.95661635,38.25325404,
            38.61286934,39.06785071,39.3414019,39.79214362,40.1565346,
            40.56495606,40.90528778,41.42141744,41.79092346,42.23146107,
            42.61704707,43.05273149,43.50415083,43.97257341,44.51408758,44.82186746])   

cov = pd.read_csv('covSN.csv', header=None)
cova = cov.as_matrix(columns=None)
CovSN = np.asmatrix(cova)

def ant(z, Om, A, al):
    return (Om * (1 + z)**3 + (1 - Om)*(A+(1+A)*(1+z)**al)**(0.5))**(-0.5)  

def dL(n, Om, A, al, M):   
    q_sn = quad(ant, 0, xx[n], args=(Om,  A, al))[0]      
    h = 5 * log10((299000/70) * (1+xx[n]) * q_sn)  
    fn = (yy[n] - M - h)            
    return fn

def SN(Om, A, al, M):
    f_list = []
    for i in range(31):     
            f_list.append(dL(i, Om, A, al, M))
    rdag = [f_list]    
    rmat = [[f] for f in f_list] 
    m1 = np.dot(rdag,CovSN)         
    m2 = np.dot(m1,rmat)            
    x2_SN = np.linalg.det(m2) * 0.000001
    return x2_SN

print(SN(0.25, 1, -0.9, 0.02))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...