【问题标题】:'numpy.ndarray' object is not callable in the Ipython console'numpy.ndarray' 对象在 Ipython 控制台中不可调用
【发布时间】:2018-11-06 18:58:15
【问题描述】:

在将数据从 excel 加载到 pandas 数据帧后,我正在尝试通过简单的插值来计算 cpmx、hmx、smpx、tmpx 和 smvx。

使用cpmx=absmatdata(1,0,0,0,44.011,100) 调用函数时,我看到了:

'numpy.ndarray' 对象不可调用

知道该怎么做吗?

这是我的代码:

import numpy as np
import pandas as pd

def absmatdata(a,b,c,d,material,tmp_ref):
    material_map = {2.016: 'H2', 28.016: 'N2', 32.000: 'O2', 32.065: 'S',
                18.016: 'H2O', 64.065: 'SO2', 12.001: 'C Graphite', 
                28.011: 'CO', 44.011: 'CO2', 16.043: 'CH4', 30.070: 'C2H6',
                44.097: 'C3H8', 58.124: 'C4H10'}
    if material in material_map:
        df = pd.read_excel('F:\MAschinenbau\Bachelorarbeit\ABSMAT.xlsx',sheet_name=material_map[material])        
    else:
        print('No data for this material available')    
        df = [list(np.arange(0,1100,100)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1)),list(np.arange(0,11,1))]
    tmp = df.values[:,0]
    cpm = df.values[:,1]
    hm = df.values[:,2]
    smp = df.values[:,3]
    smv = df.values[:,4]
    tn = np.size(df)
    tmp0 = tmp_ref
    tmpx = a
    cpmx = 0
    hmx = b
    smpx = c
    smvx = d
    if a==0 and b==0 and c==0 and d==0:
        print('All values are zero')
    elif a!=0 and b==0 and c==0 and d==0:
        print('T interpolation')
        for i in range(0,tn-1):
            if tmpx > tmp(i) and tmpx <= tmp(i+1):
                int_fak = (tmpx-tmp(i))/(tmp(i+1)-tmp(i))
                cpmx = cpm(i) + int_fak*(cpm(i+1)-cpm(i))
                hmx = hm(i) + int_fak*(hm(i+1)-hm(i))
                smpx = smp(i) + int_fak*(smp(i+1)-smp(i))
                smvx = smv(i) + int_fak*(smv(i+1)-smv(i))
    return tmpx, cpmx, hmx, smpx, smvx

【问题讨论】:

  • 如果您有堆栈跟踪,请将其包含在您的问题中
  • 哪一行出现错误?你能提供 F:\MAschinenbau\Bachelorarbeit\ABSMAT.xlsx 吗?或者至少有错误信息?
  • 也许你重用了“absmatdata”这个名字?
  • 错误消息正确描述了问题。你编写像tmp(i) 这样的表达式,这让python 相信你想用参数i 调用一个函数tmp(它是一个numpy 数组)。由于不应将 numpy 数组作为函数调用,因此会发生错误。您必须使用方括号来索引[]。这是 Python,不是 MATLAB
  • 谢谢,我正在尝试编辑我的问题以添加堆栈跟踪

标签: python


【解决方案1】:
  • 您将 df 设置为 DataFrame

  • 你设置了 tmp = df.values[:,0]

  • 你有 numpy.ndarry 在 tmp

  • 你必须用[]而不是()来获得它的物品

你的循环部分

 if tmpx > tmp(i) and tmpx <= tmp(i+1):
                 int_fak = (tmpx-tmp(i))/(tmp(i+1)-tmp(i))
                 cpmx = cpm(i) + int_fak*(cpm(i+1)-cpm(i))
                 hmx = hm(i) + int_fak*(hm(i+1)-hm(i))
                 smpx = smp(i) + int_fak*(smp(i+1)-smp(i))
                 smvx = smv(i) + int_fak*(smv(i+1)-smv(i))

应该用

改变
if tmpx > tmp[i] and tmpx <= tmp[i+1]:
                int_fak = (tmpx-tmp[i])/(tmp[i+1]-tmp[i])
                cpmx = cpm[i] + int_fak*(cpm[i+1]-cpm[i])
                hmx = hm[i] + int_fak*(hm[i+1]-hm(i))
                smpx = smp[i] + int_fak*(smp[i+1]-smp[i])
                smvx = smv[i] + int_fak*(smv[i+1]-smv[i])

您还需要将tn 更改为

tn = np.size(df.values[:,0])

【讨论】:

  • 谢谢@Ihsan Cemil Cicek,我将圆括号更改为方括号。错误现已消失。但是现在我在“if tmpx > tmp[i] and tmpx
  • index 38 是 [37] 实际上你应该从 [0] index 开始。
  • 你指的是哪一行 [0] ?
  • 我找不到解决办法,能否提供excel文件?
  • Dropbox、Drive 或类似的东西。
猜你喜欢
  • 1970-01-01
  • 2019-04-07
  • 1970-01-01
  • 2019-09-04
  • 2021-06-11
  • 2017-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多