将阵列插入非线性方程

时间:2015-07-24 15:01:48

标签: python arrays

我对Python很陌生......我很难将我的1d数组的内容插入到非线性方程式中,因此我可以最终绘制结果。我的代码如下:

import numpy as np
import matplotlib.pyplot as plt

def readfiles(file_list):
    """ read <TAB> delemited files as strings
        ignoring '# Comment' lines """
    data = []
    for fname in file_list:
        data.append(
                    np.genfromtxt(fname,
                                  comments='#',    # skip comment lines
                                  delimiter='\t',
                                  dtype ="|S", autostrip=True).T)
    return data

data = readfiles(['CR1000_rawMeasurements_15m.txt'])

def column(matrix, i):
    return [row[i] for row in matrix]

x = column(data,18)

for i in x:
    thermTemp1_degC = 1/(1.401E-3 + 2.377E-4*np.log(i) + 9.730E-8*np.log(i)**3)-273.15

我所能成功完成的只是从我的数据中提取我需要的列。当我运行这个脚本时,我得到'TypeError:没有为这种类型实现。' (我的1d数组,x,现在只是一列零。)我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里有几点需要解决。

返回正确的列

您在评论中给出的数组有点奇怪,但您可以使用numpy检索列:

data = [[ 737055., 0.], [ 737055., 0.], [ 737055., 0.], [ 737055., 0.], [ 737055., 0.], [ 735773., 0.], [ 735773., 0.], [ 735773., 0.]]]

data
=> [[[737055.0, 0.0],
     [737055.0, 0.0],
     [737055.0, 0.0],
     [737055.0, 0.0],
     [737055.0, 0.0],
     [735773.0, 0.0],
     [735773.0, 0.0],
     [735773.0, 0.0]]]

column_0 = np.array(data)[0][:, 0]
column_1 = np.array(data)[0][:, 1]

column_0
=> array([ 737055.,  737055.,  737055.,  737055.,  737055.,  735773.,
           735773.,  735773.])

column_1
=> array([ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.])

执行计算

由于x是一个numpy数组(如果你使用上面的列代码),你不需要把它放在for循环中:

thermTemp1_degC = 1/(1.401E-3 + 2.377E-4*np.log(i) + 9.730E-8*np.log(i)**3)-273.15

此处thermTemp1_degC是一个与x大小相同的numpy数组。