Reorganizing files only
This commit is contained in:
60
Numpy/Numpy commands.txt
Normal file
60
Numpy/Numpy commands.txt
Normal file
@@ -0,0 +1,60 @@
|
||||
https://docs.scipy.org/doc/numpy-1.12.0/reference/
|
||||
|
||||
Numpy
|
||||
install Numpy using pip
|
||||
import numpy as np
|
||||
ndarray - an N-dimensional array, which describes a collection of “items” of the same type
|
||||
array(list) # constructor
|
||||
asarray(a[, dtype, order]) # Convert the input to an array
|
||||
Constants:
|
||||
ndarray.shape tuple of array dimensions
|
||||
ndarray.size number of elements in array
|
||||
ndarray.itemsize size of one element
|
||||
ndarray.dtype data type of elements
|
||||
ndarray.flat 1D iterator over elements of array
|
||||
Common Functions
|
||||
np.tolist()
|
||||
np.reshape(a, (3,2))
|
||||
np.swapaxes(axis1, axis2)
|
||||
np.copy()
|
||||
arange()
|
||||
Statistics Functions:
|
||||
np.sum(a, axis)
|
||||
np.prod
|
||||
np.min
|
||||
np.max
|
||||
np.mean
|
||||
np.std standard deviation
|
||||
np.var
|
||||
np.sort(axis)
|
||||
Other Functions:
|
||||
String operations
|
||||
logical operations - AND, OR, XOR, NOT, >, <, =, ...
|
||||
trig functions
|
||||
complex numbers (real + imaginary)
|
||||
polynomials
|
||||
2D matrix operations
|
||||
Fourier transforms
|
||||
====================================================================================
|
||||
import numpy as np
|
||||
x = [0,1,2,3,4,5]
|
||||
a = np.array(x)
|
||||
|
||||
index: a[2]
|
||||
|
||||
slice: a[start:stop:step]
|
||||
a[1:4:2]
|
||||
a[3:]
|
||||
a[:3]
|
||||
a.shape
|
||||
a.size
|
||||
a.itemsize
|
||||
a.dtype
|
||||
|
||||
b = np.array([[1,2,3], [4,5,6]])
|
||||
b.swapaxes(0,1)
|
||||
|
||||
a = np.arange(0,6)
|
||||
a = np.arange(0,6).reshape(2,3)
|
||||
|
||||
|
||||
BIN
Numpy/Numpy.pptx
Normal file
BIN
Numpy/Numpy.pptx
Normal file
Binary file not shown.
7
Numpy/data.txt
Normal file
7
Numpy/data.txt
Normal file
@@ -0,0 +1,7 @@
|
||||
a, b, c, d, e, f, g, h, i, j
|
||||
9, 3, 8, 7, 6, 1, 0, 4, 2, 5
|
||||
1, 7, 4, 9, 2, 6, 8, 3, 5, 0
|
||||
4, 8, 3, 9, 5, 7, 2, 6, 0, 1
|
||||
1, 7, 4, 2, 5, 9, 6, 8, 0, 3
|
||||
0, 7, 5, 2, 8, 6, 3, 4, 1, 9
|
||||
5, 9, 1, 4, 7, 0, 3, 6, 8, 2
|
||||
BIN
Pandas/Pandas.pptx
Normal file
BIN
Pandas/Pandas.pptx
Normal file
Binary file not shown.
144
Trees/2-3_tree.py
Normal file
144
Trees/2-3_tree.py
Normal file
@@ -0,0 +1,144 @@
|
||||
# 2-3 Tree
|
||||
# balanced tree data structure with up to 2 data items per node
|
||||
|
||||
class Node:
|
||||
def __init__(self, data, par = None):
|
||||
#print ("Node __init__: " + str(data))
|
||||
self.data = list([data])
|
||||
self.parent = par
|
||||
self.child = list()
|
||||
|
||||
def __str__(self):
|
||||
if self.parent:
|
||||
return str(self.parent.data) + ' : ' + str(self.data)
|
||||
return 'Root : ' + str(self.data)
|
||||
|
||||
def __lt__(self, node):
|
||||
return self.data[0] < node.data[0]
|
||||
|
||||
def _isLeaf(self):
|
||||
return len(self.child) == 0
|
||||
|
||||
# merge new_node sub-tree into self node
|
||||
def _add(self, new_node):
|
||||
# print ("Node _add: " + str(new_node.data) + ' to ' + str(self.data))
|
||||
for child in new_node.child:
|
||||
child.parent = self
|
||||
self.data.extend(new_node.data)
|
||||
self.data.sort()
|
||||
self.child.extend(new_node.child)
|
||||
if len(self.child) > 1:
|
||||
self.child.sort()
|
||||
if len(self.data) > 2:
|
||||
self._split()
|
||||
|
||||
# find correct node to insert new node into tree
|
||||
def _insert(self, new_node):
|
||||
# print ('Node _insert: ' + str(new_node.data) + ' into ' + str(self.data))
|
||||
|
||||
# leaf node - add data to leaf and rebalance tree
|
||||
if self._isLeaf():
|
||||
self._add(new_node)
|
||||
|
||||
# not leaf - find correct child to descend, and do recursive insert
|
||||
elif new_node.data[0] > self.data[-1]:
|
||||
self.child[-1]._insert(new_node)
|
||||
else:
|
||||
for i in range(0, len(self.data)):
|
||||
if new_node.data[0] < self.data[i]:
|
||||
self.child[i]._insert(new_node)
|
||||
break
|
||||
|
||||
# 3 items in node, split into new sub-tree and add to parent
|
||||
def _split(self):
|
||||
# print("Node _split: " + str(self.data))
|
||||
left_child = Node(self.data[0], self)
|
||||
right_child = Node(self.data[2], self)
|
||||
if self.child:
|
||||
self.child[0].parent = left_child
|
||||
self.child[1].parent = left_child
|
||||
self.child[2].parent = right_child
|
||||
self.child[3].parent = right_child
|
||||
left_child.child = [self.child[0], self.child[1]]
|
||||
right_child.child = [self.child[2], self.child[3]]
|
||||
|
||||
self.child = [left_child]
|
||||
self.child.append(right_child)
|
||||
self.data = [self.data[1]]
|
||||
|
||||
# now have new sub-tree, self. need to add self to its parent node
|
||||
if self.parent:
|
||||
if self in self.parent.child:
|
||||
self.parent.child.remove(self)
|
||||
self.parent._add(self)
|
||||
else:
|
||||
left_child.parent = self
|
||||
right_child.parent = self
|
||||
|
||||
# find an item in the tree; return item, or False if not found
|
||||
def _find(self, item):
|
||||
# print ("Find " + str(item))
|
||||
if item in self.data:
|
||||
return item
|
||||
elif self._isLeaf():
|
||||
return False
|
||||
elif item > self.data[-1]:
|
||||
return self.child[-1]._find(item)
|
||||
else:
|
||||
for i in range(len(self.data)):
|
||||
if item < self.data[i]:
|
||||
return self.child[i]._find(item)
|
||||
|
||||
def _remove(self, item):
|
||||
pass
|
||||
|
||||
# print preorder traversal
|
||||
def _preorder(self):
|
||||
print (self)
|
||||
for child in self.child:
|
||||
child._preorder()
|
||||
|
||||
class Tree:
|
||||
def __init__(self):
|
||||
print("Tree __init__")
|
||||
self.root = None
|
||||
|
||||
def insert(self, item):
|
||||
print("Tree insert: " + str(item))
|
||||
if self.root is None:
|
||||
self.root = Node(item)
|
||||
else:
|
||||
self.root._insert(Node(item))
|
||||
while self.root.parent:
|
||||
self.root = self.root.parent
|
||||
return True
|
||||
|
||||
def find(self, item):
|
||||
return self.root._find(item)
|
||||
|
||||
def remove(self, item):
|
||||
self.root.remove(item)
|
||||
|
||||
def printTop2Tiers(self):
|
||||
print ('----Top 2 Tiers----')
|
||||
print (str(self.root.data))
|
||||
for child in self.root.child:
|
||||
print (str(child.data), end=' ')
|
||||
print(' ')
|
||||
|
||||
def preorder(self):
|
||||
print ('----Preorder----')
|
||||
self.root._preorder()
|
||||
|
||||
tree = Tree()
|
||||
|
||||
lst = [13, 7, 24, 15, 4, 29, 20, 16, 19, 1, 5, 22, 17]
|
||||
for item in lst:
|
||||
tree.insert(item)
|
||||
tree.printTop2Tiers()
|
||||
|
||||
# for i in range (25):
|
||||
# tree.insert(i)
|
||||
# tree.printTop2Tiers()
|
||||
# tree.preorder()
|
||||
# print (tree.find(16))
|
||||
BIN
Trees/BST_Height_Size.pptx
Normal file
BIN
Trees/BST_Height_Size.pptx
Normal file
Binary file not shown.
214
Trees/BinarySearchTree.py
Normal file
214
Trees/BinarySearchTree.py
Normal file
@@ -0,0 +1,214 @@
|
||||
# Binary Search Tree in Python
|
||||
|
||||
class Node:
|
||||
def __init__(self, val):
|
||||
self.value = val
|
||||
self.leftChild = None
|
||||
self.rightChild = None
|
||||
|
||||
def insert(self, data):
|
||||
if self.value == data:
|
||||
return False
|
||||
|
||||
elif self.value > data:
|
||||
if self.leftChild:
|
||||
return self.leftChild.insert(data)
|
||||
else:
|
||||
self.leftChild = Node(data)
|
||||
return True
|
||||
|
||||
else:
|
||||
if self.rightChild:
|
||||
return self.rightChild.insert(data)
|
||||
else:
|
||||
self.rightChild = Node(data)
|
||||
return True
|
||||
|
||||
def find(self, data):
|
||||
if(self.value == data):
|
||||
return True
|
||||
elif self.value > data:
|
||||
if self.leftChild:
|
||||
return self.leftChild.find(data)
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
if self.rightChild:
|
||||
return self.rightChild.find(data)
|
||||
else:
|
||||
return False
|
||||
|
||||
def getHeight(self):
|
||||
if self.leftChild and self.rightChild:
|
||||
return 1 + max(self.leftChild.getHeight(), self.rightChild.getHeight())
|
||||
elif self.leftChild:
|
||||
return 1 + self.leftChild.getHeight()
|
||||
elif self.rightChild:
|
||||
return 1 + self.rightChild.getHeight()
|
||||
else:
|
||||
return 1
|
||||
|
||||
def preorder(self):
|
||||
if self:
|
||||
print (str(self.value))
|
||||
if self.leftChild:
|
||||
self.leftChild.preorder()
|
||||
if self.rightChild:
|
||||
self.rightChild.preorder()
|
||||
|
||||
def postorder(self):
|
||||
if self:
|
||||
if self.leftChild:
|
||||
self.leftChild.postorder()
|
||||
if self.rightChild:
|
||||
self.rightChild.postorder()
|
||||
print (str(self.value))
|
||||
|
||||
def inorder(self):
|
||||
if self:
|
||||
if self.leftChild:
|
||||
self.leftChild.inorder()
|
||||
print (str(self.value))
|
||||
if self.rightChild:
|
||||
self.rightChild.inorder()
|
||||
|
||||
class Tree:
|
||||
def __init__(self):
|
||||
self.root = None
|
||||
|
||||
def insert(self, data):
|
||||
if self.root:
|
||||
return self.root.insert(data)
|
||||
else:
|
||||
self.root = Node(data)
|
||||
return True
|
||||
|
||||
def find(self, data):
|
||||
if self.root:
|
||||
return self.root.find(data)
|
||||
else:
|
||||
return False
|
||||
|
||||
def getHeight(self):
|
||||
if self.root:
|
||||
return self.root.getHeight()
|
||||
else:
|
||||
return -1
|
||||
|
||||
def remove(self, data):
|
||||
# empty tree
|
||||
if self.root is None:
|
||||
return False
|
||||
|
||||
# data is in root node
|
||||
elif self.root.value == data:
|
||||
if self.root.leftChild is None and self.root.rightChild is None:
|
||||
self.root = None
|
||||
elif self.root.leftChild and self.root.rightChild is None:
|
||||
self.root = self.root.leftChild
|
||||
elif self.root.leftChild is None and self.root.rightChild:
|
||||
self.root = self.root.rightChild
|
||||
elif self.root.leftChild and self.root.rightChild:
|
||||
delNodeParent = self.root
|
||||
delNode = self.root.rightChild
|
||||
while delNode.leftChild:
|
||||
delNodeParent = delNode
|
||||
delNode = delNode.leftChild
|
||||
|
||||
self.root.value = delNode.value
|
||||
if delNode.rightChild:
|
||||
if delNodeParent.value > delNode.value:
|
||||
delNodeParent.leftChild = delNode.rightChild
|
||||
elif delNodeParent.value < delNode.value:
|
||||
delNodeParent.rightChild = delNode.rightChild
|
||||
else:
|
||||
if delNode.value < delNodeParent.value:
|
||||
delNodeParent.leftChild = None
|
||||
else:
|
||||
delNodeParent.rightChild = None
|
||||
|
||||
return True
|
||||
|
||||
parent = None
|
||||
node = self.root
|
||||
|
||||
# find node to remove
|
||||
while node and node.value != data:
|
||||
parent = node
|
||||
if data < node.value:
|
||||
node = node.leftChild
|
||||
elif data > node.value:
|
||||
node = node.rightChild
|
||||
|
||||
# case 1: data not found
|
||||
if node is None or node.value != data:
|
||||
return False
|
||||
|
||||
# case 2: remove-node has no children
|
||||
elif node.leftChild is None and node.rightChild is None:
|
||||
if data < parent.value:
|
||||
parent.leftChild = None
|
||||
else:
|
||||
parent.rightChild = None
|
||||
return True
|
||||
|
||||
# case 3: remove-node has left child only
|
||||
elif node.leftChild and node.rightChild is None:
|
||||
if data < parent.value:
|
||||
parent.leftChild = node.leftChild
|
||||
else:
|
||||
parent.rightChild = node.leftChild
|
||||
return True
|
||||
|
||||
# case 4: remove-node has right child only
|
||||
elif node.leftChild is None and node.rightChild:
|
||||
if data < parent.value:
|
||||
parent.leftChild = node.rightChild
|
||||
else:
|
||||
parent.rightChild = node.rightChild
|
||||
return True
|
||||
|
||||
# case 5: remove-node has left and right children
|
||||
else:
|
||||
delNodeParent = node
|
||||
delNode = node.rightChild
|
||||
while delNode.leftChild:
|
||||
delNodeParent = delNode
|
||||
delNode = delNode.leftChild
|
||||
|
||||
node.value = delNode.value
|
||||
if delNode.rightChild:
|
||||
if delNodeParent.value > delNode.value:
|
||||
delNodeParent.leftChild = delNode.rightChild
|
||||
elif delNodeParent.value < delNode.value:
|
||||
delNodeParent.rightChild = delNode.rightChild
|
||||
else:
|
||||
if delNode.value < delNodeParent.value:
|
||||
delNodeParent.leftChild = None
|
||||
else:
|
||||
delNodeParent.rightChild = None
|
||||
|
||||
def preorder(self):
|
||||
if self.root is not None:
|
||||
print("PreOrder")
|
||||
self.root.preorder()
|
||||
|
||||
def postorder(self):
|
||||
if self.root is not None:
|
||||
print("PostOrder")
|
||||
self.root.postorder()
|
||||
|
||||
def inorder(self):
|
||||
if self.root is not None:
|
||||
print("InOrder")
|
||||
self.root.inorder()
|
||||
|
||||
bst = Tree()
|
||||
print(bst.insert(10))
|
||||
#print(bst.insert(5))
|
||||
bst.preorder()
|
||||
print(bst.getHeight())
|
||||
#bst.postorder()
|
||||
#bst.inorder()
|
||||
print(bst.remove(10))
|
||||
bst.preorder()
|
||||
236
Trees/bst.py
Normal file
236
Trees/bst.py
Normal file
@@ -0,0 +1,236 @@
|
||||
# Binary Search Tree in Python
|
||||
|
||||
class Node:
|
||||
def __init__(self, val):
|
||||
self.value = val
|
||||
self.leftChild = None
|
||||
self.rightChild = None
|
||||
|
||||
def insert(self, data):
|
||||
if self.value == data:
|
||||
return False
|
||||
|
||||
elif self.value > data:
|
||||
if self.leftChild:
|
||||
return self.leftChild.insert(data)
|
||||
else:
|
||||
self.leftChild = Node(data)
|
||||
return True
|
||||
|
||||
else:
|
||||
if self.rightChild:
|
||||
return self.rightChild.insert(data)
|
||||
else:
|
||||
self.rightChild = Node(data)
|
||||
return True
|
||||
|
||||
def find(self, data):
|
||||
if(self.value == data):
|
||||
return True
|
||||
elif self.value > data:
|
||||
if self.leftChild:
|
||||
return self.leftChild.find(data)
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
if self.rightChild:
|
||||
return self.rightChild.find(data)
|
||||
else:
|
||||
return False
|
||||
|
||||
def getSize(self):
|
||||
if self.leftChild and self.rightChild:
|
||||
return 1 + self.leftChild.getSize() + self.rightChild.getSize()
|
||||
elif self.leftChild:
|
||||
return 1 + self.leftChild.getSize()
|
||||
elif self.rightChild:
|
||||
return 1 + self.rightChild.getSize()
|
||||
else:
|
||||
return 1
|
||||
|
||||
def getHeight(self):
|
||||
if self.leftChild and self.rightChild:
|
||||
return 1 + max(self.leftChild.getHeight(), self.rightChild.getHeight())
|
||||
elif self.leftChild:
|
||||
return 1 + self.leftChild.getHeight()
|
||||
elif self.rightChild:
|
||||
return 1 + self.rightChild.getHeight()
|
||||
else:
|
||||
return 1
|
||||
|
||||
def preorder(self):
|
||||
if self:
|
||||
print (str(self.value))
|
||||
if self.leftChild:
|
||||
self.leftChild.preorder()
|
||||
if self.rightChild:
|
||||
self.rightChild.preorder()
|
||||
|
||||
def postorder(self):
|
||||
if self:
|
||||
if self.leftChild:
|
||||
self.leftChild.postorder()
|
||||
if self.rightChild:
|
||||
self.rightChild.postorder()
|
||||
print (str(self.value))
|
||||
|
||||
def inorder(self):
|
||||
if self:
|
||||
if self.leftChild:
|
||||
self.leftChild.inorder()
|
||||
print (str(self.value))
|
||||
if self.rightChild:
|
||||
self.rightChild.inorder()
|
||||
|
||||
class Tree:
|
||||
def __init__(self):
|
||||
self.root = None
|
||||
|
||||
def insert(self, data):
|
||||
if self.root:
|
||||
return self.root.insert(data)
|
||||
else:
|
||||
self.root = Node(data)
|
||||
return True
|
||||
|
||||
def find(self, data):
|
||||
if self.root:
|
||||
return self.root.find(data)
|
||||
else:
|
||||
return False
|
||||
|
||||
def getHeight(self):
|
||||
if self.root:
|
||||
return self.root.getHeight()
|
||||
else:
|
||||
return 0
|
||||
|
||||
def getSize(self):
|
||||
if self.root:
|
||||
return self.root.getSize()
|
||||
else:
|
||||
return 0
|
||||
|
||||
def remove(self, data):
|
||||
# empty tree
|
||||
if self.root is None:
|
||||
return False
|
||||
|
||||
# data is in root node
|
||||
elif self.root.value == data:
|
||||
if self.root.leftChild is None and self.root.rightChild is None:
|
||||
self.root = None
|
||||
elif self.root.leftChild and self.root.rightChild is None:
|
||||
self.root = self.root.leftChild
|
||||
elif self.root.leftChild is None and self.root.rightChild:
|
||||
self.root = self.root.rightChild
|
||||
elif self.root.leftChild and self.root.rightChild:
|
||||
delNodeParent = self.root
|
||||
delNode = self.root.rightChild
|
||||
while delNode.leftChild:
|
||||
delNodeParent = delNode
|
||||
delNode = delNode.leftChild
|
||||
|
||||
self.root.value = delNode.value
|
||||
if delNode.rightChild:
|
||||
if delNodeParent.value > delNode.value:
|
||||
delNodeParent.leftChild = delNode.rightChild
|
||||
elif delNodeParent.value < delNode.value:
|
||||
delNodeParent.rightChild = delNode.rightChild
|
||||
else:
|
||||
if delNode.value < delNodeParent.value:
|
||||
delNodeParent.leftChild = None
|
||||
else:
|
||||
delNodeParent.rightChild = None
|
||||
|
||||
return True
|
||||
|
||||
parent = None
|
||||
node = self.root
|
||||
|
||||
# find node to remove
|
||||
while node and node.value != data:
|
||||
parent = node
|
||||
if data < node.value:
|
||||
node = node.leftChild
|
||||
elif data > node.value:
|
||||
node = node.rightChild
|
||||
|
||||
# case 1: data not found
|
||||
if node is None or node.value != data:
|
||||
return False
|
||||
|
||||
# case 2: remove-node has no children
|
||||
elif node.leftChild is None and node.rightChild is None:
|
||||
if data < parent.value:
|
||||
parent.leftChild = None
|
||||
else:
|
||||
parent.rightChild = None
|
||||
return True
|
||||
|
||||
# case 3: remove-node has left child only
|
||||
elif node.leftChild and node.rightChild is None:
|
||||
if data < parent.value:
|
||||
parent.leftChild = node.leftChild
|
||||
else:
|
||||
parent.rightChild = node.leftChild
|
||||
return True
|
||||
|
||||
# case 4: remove-node has right child only
|
||||
elif node.leftChild is None and node.rightChild:
|
||||
if data < parent.value:
|
||||
parent.leftChild = node.rightChild
|
||||
else:
|
||||
parent.rightChild = node.rightChild
|
||||
return True
|
||||
|
||||
# case 5: remove-node has left and right children
|
||||
else:
|
||||
delNodeParent = node
|
||||
delNode = node.rightChild
|
||||
while delNode.leftChild:
|
||||
delNodeParent = delNode
|
||||
delNode = delNode.leftChild
|
||||
|
||||
node.value = delNode.value
|
||||
if delNode.rightChild:
|
||||
if delNodeParent.value > delNode.value:
|
||||
delNodeParent.leftChild = delNode.rightChild
|
||||
elif delNodeParent.value < delNode.value:
|
||||
delNodeParent.rightChild = delNode.rightChild
|
||||
else:
|
||||
if delNode.value < delNodeParent.value:
|
||||
delNodeParent.leftChild = None
|
||||
else:
|
||||
delNodeParent.rightChild = None
|
||||
|
||||
def preorder(self):
|
||||
if self.root is not None:
|
||||
print("PreOrder")
|
||||
self.root.preorder()
|
||||
|
||||
def postorder(self):
|
||||
if self.root is not None:
|
||||
print("PostOrder")
|
||||
self.root.postorder()
|
||||
|
||||
def inorder(self):
|
||||
if self.root is not None:
|
||||
print("InOrder")
|
||||
self.root.inorder()
|
||||
|
||||
def main():
|
||||
bst = Tree()
|
||||
print(bst.insert(10))
|
||||
print(bst.insert(5))
|
||||
bst.insert(2)
|
||||
bst.insert(7)
|
||||
bst.preorder()
|
||||
print('Height = ', bst.getHeight())
|
||||
print('Size = ', bst.getSize())
|
||||
#bst.postorder()
|
||||
#bst.inorder()
|
||||
print(bst.remove(10))
|
||||
bst.preorder()
|
||||
|
||||
main()
|
||||
Reference in New Issue
Block a user