
这是在PyGame的surfarray模块的上下文中,该模块没有返回RGBA(n * m * 4)数组的函数 – 仅分别为RGB(n * m * 3)和A(n * m)数组.理想情况下,我会在O(1)中创建一个新的数组“RGBA”,它引用“RGB”和“A”数组.改变“RGBA”会改变“RGB”和“A”,因此改变表面.
我不知道这是否可行,因为我想不出用C做的方法.但是,我可以想到一些想法.例如,可能有一个numpy数组类型封装了一些子数组,并在内部将索引重定向到C级的正确数据.这没关系.
解决方法 您可以创建自己的类来管理引用过程,如下例所示.你应该进一步研究这个问题,包括使用__getslice __,__ add__,__ mul__等切片功能.import numpy as npa1 = np.arange(1,11)a2 = np.arange(101,111)class Combiner(): def __init__(self,*args): self.arrays = [arg for arg in args] self.lens = [len(arg) for arg in args] def __getitem__(self,i): if i >=0: shift = 0 acc = 0 for j,l in enumerate(self.lens): acc += l if i<acc: return self.arrays[j][i-shift] shift += l if i<0: shift = 0 acc = 0 for j in xrange(len(self.lens)-1,-1,-1): l = self.lens[j] acc -= l if i>=acc: return self.arrays[j][i+shift] shift += l def __setitem__(self,i,v): if i >=0: shift = 0 acc = 0. for j,l in enumerate(self.lens): acc += l if i<acc: self.arrays[j][i-shift] = v return shift += l if i<0: shift = 0 acc = 0 for j in xrange(len(self.lens)-1,-1): l = self.lens[j] acc -= l if i>=acc: self.arrays[j][i+shift] = v return shift += la3 = Combiner(a1,a2)print a3[-10]# 101a3[-2] = 22222a3[ 4] = 11111print a1#[ 1 2 3 4 11111 6 7 8 9 10]print a2#[ 101 102 103 104 105 106 107 108 22222 110]总结
以上是内存溢出为你收集整理的python – 通过引用组合NumPy数组全部内容,希望文章能够帮你解决python – 通过引用组合NumPy数组所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)