我使用的是表示网格的大型数组,每个元素都是具有x,y属性的Cell对象。你知道吗
我不确定初始化数组的最有效方法,我的基本实现是:
# X,Y dimensions of grid:
Gx = 3000
Gy = 4000
# Array to create
A = numpy.ndarray(shape=(int(self.Gx),int(self.Gy)),dtype=object)
for y in range(0,int(self.Gy)):
for x in range (0,int(self.Gx)):
c = Cell(1,x,y,1)
A.itemset((x,y),c)
显然,这对于大型阵列是不有效的。我知道如何创建大型对象数组并使用矢量化一次访问所有对象。我搞不懂的是如何在一个函数中应用一个索引数组(通过A.index),而不需要遍历整个数组。你知道吗
每个Cell对象都有一个setX和setY函数,我可以将索引数组传递给函数,以便在一行中设置每个Cell的y值吗?你知道吗
定义一个简单类:
创建这些对象数组的一种方法:
创建相同对象的列表方式:
一些比较时间:
对于大型集合,
frompyfunc
方法具有适度的速度优势。你知道吗从所有单元格获取值:
使用
SetX
方法:SetX
不返回任何内容,因此函数调用生成的数组是allNone
。但是它修改了arr
的所有元素。与列表理解一样,我们通常不使用frompyfunc
调用来产生副作用,但这是可能的。你知道吗np.vectorize
,在它的默认(和原始)形式中,只使用frompyfunc
,并调整返回的数据类型。frompyfunc
总是返回对象数据类型。较新版本的vectorize
有一个signature
参数,允许我们向函数传递数组(而不是标量),然后返回数组。但这个过程更慢。你知道吗像这样定义对象数组可能会使代码看起来更干净、更有条理,但它们在速度上永远无法与数值numpy数组相匹配。你知道吗
给定
Cell
的定义,我可以将属性设置为数组,例如但是要设置单元格数组的值,我必须首先构造一个对象数组:
我无法传递(3,2)数组:
numpy
优先使用多维(数字)数组。创建和使用对象数据类型数组需要一些特殊技巧。你知道吗相关问题 更多 >
编程相关推荐