python 线型_CCF 202006-1 线性分类器 python
題目:
線性分類器(line)
【題目描述】
考慮一個簡單的二分類問題——將二維平面上的點分為A和B兩類。
訓練數據包含n個點,其中第i個點(1≤i≤n)可以表示為一個三元組(x,y,type),即該點的橫坐標、縱坐標和類別。
在二維平面上,任意一條直線可以表示為 θ?+θ?x+θ?y=0的形式,即由θ?,θ?,θ?三個參數確定該直線,且滿足θ?,θ?不同時為0。
基于這n個已知類別的點,我們想要在平面上找到一條直線作為一個線性分類器。具體來說,這條線要把訓練數據中的A、B兩類點完美分隔開來,即一側只有A類點、另一側只有B類點。這樣,對于任意一個的未知類別的點,我們就可以根據它是位于直線的哪一側來預測它的類別了。
在本題中我們僅需要處理m個如下查詢:給定一條直線,判斷它是否能將訓練數據中的A、B兩類點完美分開。
【輸入格式】
從標準輸入讀入數據。輸入共n+m+1行。
第一行包含用空格分隔的兩個正整數n和m,分別表示點和查詢的個數。
第二行到第n+1行依次輸入n個點的信息。第i+1行(1≤i≤n)包含用空格分隔的三項x,y和type,分別表示第i個點的橫、縱坐標和類別,其中坐標為整數、類別為一個大寫英文字母A或B。
第n+2行到第n+m+1行依次輸入m個查詢。第j+n+1行(1≤j≤m)包含用空格分隔的三個整數θ?,θ?和θ?,表示第j個查詢中給定直線的三個參數。
【輸出格式】
輸出到標準輸出。
輸出共m行,每行輸出一個字符串。
第j行(1≤j≤m)輸出的字符串對應第個查詢的結果:如果給定直線可以完美分隔A、B兩類點,則輸出Yes;否則輸出No。
【樣例1輸入】
9 3
1 1 A
1 0 A
1 -1 A
2 2 B
2 3 B
0 1 A
3 1 B
1 3 B
2 0 A
0 2 -3
-3 0 2
-3 1 1
【樣例1輸出】
No
No
Yes
代碼,用的python,從別人那里扒過來的。已獲得同意
#-*- coding: utf-8 -*-
defjudga(lis1, z):
s=0for i inlis1:if z[0] + i[0] * z[1] + i[1] * z[2] >0:
s+= 1
if s == len(lis1) or s ==0:returnTrueelse:returnFalsedefjudg(x, y, z):
flag=Falseif (z[0] + x[0] * z[1] + x[1] * z[2]) * (z[0] + y[0] * z[1] + y[1] * z[2]) <0:
flag=Truereturnflagif __name__ == '__main__':
da_list= [] #存放A類點
db_list = [] #存放B類點
d_list =[]
n, m=map(int, input().split())for i inrange(n):
raw=input()
x, y, z=raw.split()
x=int(x)
y=int(y)
tub1=(x, y, z)if tub1[2] == 'A':
da_list.append(tub1)else:
db_list.append(tub1)for i inrange(m):
a, b, c=map(int, input().split())
tub2=(a, b, c)
d_list.append(tub2)for i inrange(m):if judga(da_list, d_list[i]) == True and judga(db_list, d_list[i]) ==True:ifjudg(da_list[0], db_list[0], d_list[i]):print('Yes')else:print('No')else:print('No')
滿分
總結
以上是生活随笔為你收集整理的python 线型_CCF 202006-1 线性分类器 python的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《白鹿原》剧中音乐原声歌曲有哪些
- 下一篇: python三维数据图_matplotl