我正在寻找一种访问数据数组的方法,使用包含有趣索引的数组数组,而不进行for循环。数组数组是dtype = object,因为每个单独的数组都有不同的大小。 我构建了一个简单的例子:
myArrayData = np.random.rand(100) ### a classical np.array
myArrayOfIndex = np.array( [ np.array([1,2,3],dtype=np.int32),
np.array([4,5,6,7],dtype=np.int32) ] )
### the array of array containing the index
### it is automatically a dtype=object because of the sizes of the sub-array
我无法使用此'对象数组'访问我的数据:
myArrayData[ myArrayOfIndex ]
myArrayOfIndex可以包含所有大小的数组,甚至是[]。 当然我可以在myArrayOfIndex上做一个循环,但它不是很有效。
有没有办法让它没有循环?
或者我应该考虑以另一种有效的方式组织我的数据/索引(这里使用的方法简单直观......但不能正常工作)!?
我正在编辑我的问题,因为它可能太“普遍”了:
实际上我有几个myArrayData:myArrayData1,...,myArrayDataN每个都包含我所有“粒子”的不同“物理”属性。 myArrayOfIndex包含子数组,每个子数组都包含链接到数据的“粒子”索引,但它们不一定具有相同数量的“粒子”。
目前我在myArrayOfIndex上循环并提取数据:
np.array( [ myArrayData[i] for i in myArrayOfIndex ] )
但有些人可以注意到,在np.array上做一个循环可以被认为是一种罪恶! (:))所以我很想知道是否有办法避免这种for循环。优化我的代码与学习python相同。