numpy——列表筛选及解方程式

  当对array数组进行计算时,有时候需要筛选出题目所要求的数据,筛选对象可能是数字,也可能是字符串。这次我就来说说如何针对字符串进行筛选。

 

  当有一个列表[['男', '2', '4', '40'], ["女",21,13,50],['男', '8', '6', '24']],要求解“男”方程式,也就是我们需要将含有字符串“男”的列表数据调出来,即将含有字符串“女”的列表删去。这一步我们需要用到函数np.delete()。

  很容易就能想到如下方法:

bbb=np.array([['', '2', '4', '40'], ["",21,13,50],['', '8', '6', '24']])
x,y=np.shape(bbb)
for i in range(x):if bbb[0,i]!="男":
        bbb=np.delete(bbb,i,axis=0)

  运行后发现程序并没有如我们所想删去“女”数据列,在代码中插入print()来测试是哪里运行不成功:

bbb=np.array([['', '2', '4', '40'], ["",21,13,50],['', '8', '6', '24']])
x,y=np.shape(bbb)
for i in range(x):
    print(i)
    if bbb[0,i]!="男":
        print("yes")
        bbb=np.delete(bbb,i,axis=0)

  运行结果为:0 1 2,即判断每一列第一个数据是否为“男”处不能成功判断。将bbb[i][0]改为bbb发现程序报错,但当单独判断时程序可以判断成功:

aaa=bbb==""
aaa

 

   我觉得可能是array数组对数据的误判,我将array转换成list后解决了该问题,成功筛选出"男"数据列:

aaa=bbb==""
aaa=aaa.tolist()
for i in range(x):
    print(i)
    if aaa[i][0]!=False:
        print("yes")
        bbb=np.delete(bbb,i,axis=0)

  运行后程序正确输出yes

  输出bbb显示结果为:

  

 

   接下来就是进行方程式的运算,前两个数为x,y的系数,最后一个数为常数,将数据单独取出来并进行运算:

b=np.array(bbb[:,3:4])
a=np.array(bbb[:,1:3])
result=linalg.solve(a,b)

  运行后发现程序报错,输出bbb发现数据类型为“<U2”,我认为可能是数据类型不是int型,将数据类型转换为int:

b=np.array(bbb[:,3:4],dtype="int32")
a=np.array(bbb[:,1:3],dtype="int32")
linalg.solve(a,b)

  程序成功运行并得到正确结果:

 

 

  但是这种方法有个缺陷,即列表中没有“男”数据或只有一个数据列时,程序会报错。

  此时我们需要定义一个数得到bbb的shape的长度:

c=np.shape(bbb)
cc=len(c)

  在给x,y赋值np.shape(bbb)前加入如上代码,判断cc长度为2,1或0,当判断为2时,运行之前的代码;为1则只给x赋值;为0直接返回空数组。代码如下:

bbb=np.array([['', '2', '4', '40'], ["",21,13,50],['', '8', '6', '24']])
result=[]
c=np.shape(bbb)
cc=len(c)
if cc==2:
    x,y=np.shape(bbb)
    for i in range(x):
        print(i)
        if bbb[0,i]!="":
            print("yes")
            bbb=np.delete(bbb,i,axis=0)
    d=np.shape(bbb)
    dd=len(d)
    if dd==2:
        b=np.array(bbb[:,3:4],dtype="int32")
        a=np.array(bbb[:,1:3],dtype="int32")
        result=linalg.solve(a,b)
    else:
        return result=[]
else:
    return result=[]

  运行结果正确,到这里我们就完成了数据的筛选即方程式的运算。

posted @ 2020-03-15 01:30  寡人略帅  阅读(985)  评论(0编辑  收藏  举报