• 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=[]

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

  • 相关阅读:
    LeetCode#13罗马数字转整数
    LeetCode#7整数反转
    LeetCode#1两数之和
    LeetCode#26删除排序数组中的重复项
    LeecCode#1550存在连续三个奇数的数组
    LeetCode#228汇总区间
    LeetCode#1476子矩形查询
    LeetCode#1535找出数组游戏的赢家
    LeetCode#867转置矩阵
    Vue源码——摸着石头过河
  • 原文地址:https://www.cnblogs.com/zhangmingfeng/p/12495607.html
Copyright © 2020-2023  润新知