二维、调用-Python和数据结构学习 -by小雨
每日一贴,明天的内容关键字为二维、调用-明天就到了二维的了.Python中认默是没有带二维的据数结构的.二维的据数结构可以通过一维的据数成组.码代如下
class Array2D:
def __init__(self,numRows,numCols):
self._theRows = Array(numRows)
for i in range(numRows):
self._theRows = Array(numCols)
def numRows(self):
return len(self._theRows)
def numCols(self):
return len(self._theRows)
def clear(self,value):
for r in range(self.numRows()):
self._theRows.clear(value)
def __getitem__(self,ndxTuple):
assert len(ndxTuple) == 2,"Invalid number of array subscripts"
row = ndxTuple
col = ndxTuple]
assert row >= 0 and row <self.numRows()\
and col >= 0 and col < self.numCols(),\
"Array subscript out of range"
the1dArray = self._theRows
return the1dArray
def __setitem__(self,ndxTuple,value):
assert len(ndxTuple) == 2,"Invalid number of array subscripts"
row = ndxTuple
col = ndxTuple]
assert row >= 0 and row <self.numRows()\
and col >= 0 and col < self.numCols(),\
"Array subscript out of range"
the1dArray = self._theRows
the1dArray = value
注意下调用情势,这里的是实现了 __getitem__ ,__setitem__,这里是这样调用的 如a = Array2D(2,3) a = 5
当然也可以像c/c++那样,改写下__getitem__
def __getitem__(self,row):
return self._thwRows
这时调用就是这模样 val = a 和a = val,连__setitem__都不要写了.相当于2次函数调用.
说到二维组数天然想到矩阵(Matrix).
当然实际用使时是直接用使numpy庫拉.
实现码代如下,其实只是在Array2D上加了几个简略的作操而已.
from array import Array2D
class Matrix:
def __init__(self,numRows,numCols):
self._theGrid = Array2D(numRows,numCols)
self._theGrid.clear(0)
def numRows(self):
return self._theGrid.numRows()
def numCols(self):
return self._theGrid.numCols()
def __getitem__(self,ndxTuple):
return self._theGrid,ndxTuple]]
def __setitem__(self,ndxTuple,scalar):
self._theGrid,ndxTuple[1]] = scalar
def scaleBy(self,scalar):
for r in range(self.numRows()):
for c in range(self.numCols()):
self *= scalar
def tranpose(self):
newMatrix = Matrix(self.numCols(),self.numRows())
for r in range(self.numRows()):
for c in range(self.numCols()):
newMatrix = self._theGrid
return newMatrix
def __add__(self,rhsMatrix):
assert rhsMatrix.numRows() == self.numRows() and \
rhsMatrix.numCols() == self.numCols(),\
"Matrix sizes not compatible for the add operation"
newMatrix = Matrix(self.numRows(),self.numCols())
for r in range(self.numRows()):
for c in range(self.numCols()):
newMatrix = self + rhsMatrix
return newMatrix
def __sub__(self,rhsMatrix):
assert rhsMatrix.numRows() == self.numRows() and \
rhsMatrix.numCols() == self.numCols(),\
"Matrix sizes not compatible for the add operation"
newMatrix = Matrix(self.numRows(),self.numCols())
for r in range(self.numRows()):
for c in range(self.numCols()):
newMatrix = self - rhsMatrix
return newMatrix
def __mul__(self,rhsMatrix):
assert rhsMatrix.numRows() == self.numCols() ,\
"Matrix sizes not compatible for the add operation"
newR = self.numRows()
newC = rhsMatrix.numCols()
newK = self.numCols()
newMatrix = Matrix(newR,newC)
for r in range(newR):
for c in range(newC):
temp = 0
for k in range(newK):
temp += self._theGrid*rhsMatrix
newMatrix = temp
return newMatrix
测试也很简略.
嗯,好了睡觉...
文章结束给大家分享下程序员的一些笑话语录: 一位程序员去海边游泳,由于水性不佳,游不回岸了,于是他挥着手臂,大声求.救:“F1,F1!”
页:
[1]