`
wwweducn
  • 浏览: 29675 次
文章分类
社区版块
存档分类
最新评论

数组、多维-Python和数据结构学习 -by小雨

阅读更多

最近应用开发的过程中出现了一个小问题,顺便记录一下原因和方法--数组、多维-

    昨天勤了没写,天今也勤了.

    这个是多维数组.在c/c++多维数组可以应用编译器帮你算计.但是在Python中没有这个功能.只好写类了.

    码代如下:

class MulitArray:
    def __init__(self,*dimensions):
        assert len(dimensions) > 1
        self._dims = dimensions
        size = 1
        for d in dimensions:
            assert d > 0,"Dimeons must be >0"
            size*= d
        self._elements = Array(size)
        self._factors = Array(len(dimensions))
        self._computeFactors()
        
    def numDims(self):
        return len(self._dims)
    
    
    def length(self,dim):
        assert dim >= 1 and dim < len(self._dims),\
            "Dimension component out of range"
        #从1开始
        return self._dims[dim-1]
    
    def clear(self,value):
        self._elements.clear(value)
        
    def __getitem__(self,ndxTuple):
        assert len(ndxTuple) == self.numDims(),"Invalid # of array subscripts"
        index = self._computeIndex(ndxTuple)
        assert index is not None,"Array subscript out of range"
        return self._elements[index]
    
    def __setitem__(self,ndxTuple,value):
        assert len(ndxTuple) == self.numDims(),"Invalid # of array subscripts"
        index = self._computeIndex(ndxTuple)
        assert index is not None,"Array subscript out of range"
        self._elements[index] = value
        
    def _computeIndex(self,idx):
        offset  = 0
        for j in range(len(idx)):
            #其实这里也没必要设置的只要最后结果好就行
            if idx[j] < 0 or idx[j] >= self._dims[j]:
                return None
            else:
                offset += idx[j] * self._factors[j]
        return offset
    
    def _computeFactors(self):
        f = 1
        for i in range(self.numDims()-1,-1,-1):
            self._factors[i] = f
            f *= self._dims[i]

这个很简单,就是将多维数组射映到一维数组上,取存都应用了算计.

    当然这里只是很简单的实现,往深刻些的话 就得斟酌很多了,有取取多维数组中的子数组,约节内存啥的

    当然记得,<码代之美>上讲到关于射映的高等巧技的,还有c++中vararray和slice_array(不过像好很少有人用)也可以模拟出高维数组.

    额,看书先..

文章结束给大家分享下程序员的一些笑话语录: 自行车
一个程序员骑着一个很漂亮的自行车到了公司,另一个程序员看到了他,问 到,“你是从哪搞到的这么漂亮的车的?”
骑车的那个程序员说, “我刚从那边过来, 有一个漂亮的姑娘骑着这个车过来, 并停在我跟前,把衣服全脱了,然后对我说,‘你想要什么都可以’”。
另一个程序员马上说到, “你绝对做了一个正确的选择, 因为那姑娘的衣服你 并不一定穿得了”。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics