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()来测试是哪里运行不成功:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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后解决了该问题,成功筛选出"男"数据列:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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直接返回空数组。代码如下:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
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=[]

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值