前回の
を経て、背伸びし過ぎたので志向を変えて遊んでみた。
以下、参考にしたサイトなど
まずはNOTゲートをdef使ってNOTの操作を定義して
今回は後々これ使って色々したいのでおまじない
if __name__=='__main__':
を入れてる。
def NOT(a):
if(a == 0):
return 1
elif(a == 1):
return 0
if __name__=='__main__':
for xs in [(0), (1)]:
y = NOT(xs)
print(str(xs) + " -> " + str(y))
出力結果
0 -> 1
1 -> 0
素晴らしい。NOTゲートの完成だ。
続いてORゲートを作る。
def OR(a, b):
if a == 1:
return 1
elif b == 1:
return 1
else:
return 0
if __name__=='__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = OR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
出力結果
(0, 0) -> 0
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 1
素晴らしい。ORゲートの完成だ。
ちなみにnumpy使って作るとこうなるらしい。
import numpy as np
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = -0.9
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = OR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
いや長いw必ずしもimport numpy as npすればいいわけではないと。。。
続いてANDゲートを作る。
def AND (a, b):
if a == 1 and b == 1:
return 1
else:
return 0
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = AND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
出力結果
(0, 0) -> 0
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 1
素晴らしい。ANDゲートの完成だ。
ちなみにnumpy使って作るとこうなるらしい。
import numpy as np
def AND(x1, x2):
x = np.array([x1, x2])
w = np.array([1, 1])
b = -1
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = AND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
最後は納戸・・・NANDゲートを作る。
def NAND (a, b):
if a == 1 and b == 1:
return 0
else:
return 1
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NAND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
出力結果
(0, 0) -> 1
(1, 0) -> 1
(0, 1) -> 1
(1, 1) -> 0
素晴らしい。NANDゲートの完成だ。
ちなみにnumpy使って作るとこうなるらしい。
import numpy as np
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.9, -0.9])
b = 1
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NAND(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
結局NANDゲートが一つあれば事足りるらしい。
おまけのNORゲート
def NOR(a, b):
if(a == 0) and (b == 0):
return 1
elif(a == 0) and (b == 1):
return 0
elif(a == 1) and (b == 0):
return 0
elif(a == 1) and (b == 1):
return 0
if __name__ == '__main__':
for xs in [(0, 0), (1, 0), (0, 1), (1, 1)]:
y = NOR(xs[0], xs[1])
print(str(xs) + " -> " + str(y))
出力結果
(0, 0) -> 1
(1, 0) -> 0
(0, 1) -> 0
(1, 1) -> 0
素晴らしい。NORゲートの完成だ。