python – 通过引用组合NumPy数组

python – 通过引用组合NumPy数组,第1张

概述我想在O(1)中将两个数组组合成一个新数组.然后,我想更改此新数组中的值以更改旧数组中的值. 这是在PyGame的surfarray模块的上下文中,该模块没有返回RGBA(n * m * 4)数组的函数 – 仅分别为RGB(n * m * 3)和A(n * m)数组.理想情况下,我会在O(1)中创建一个新的数组“RGBA”,它引用“RGB”和“A”数组.改变“RGBA”会改变“RGB”和“A”,因 我想在O(1)中将两个数组组合成一个新数组.然后,我想更改此新数组中的值以更改旧数组中的值.

这是在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数组所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/langs/1196737.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存