我在以下方面遇到了一些问题。我有一个mx2n数组(solution
)。我想将这些值放入nmx2数组中,每个数组存储在列表masses
中的不同对象中。代码不能依赖于所有循环,否则程序会非常慢。以下是我的尝试:
for i in range(len(masses)):
self.masses[i].l = solution[:len(solution)][2*i: 2*(i + 1)]
问题是,这只需要将整个解决方案数组放入每个l
数组中。你知道为什么会这样吗
例如,假设数组masses
中有3个对象。solution
输入是
[[0,0,0,0,0,0]
[1,2,3,4,5,6]
[2,4,6,8,10,12]]
在masses
中的每个对象中,l
的期望值是:
self.masses[0].l = [[0,0]
[1,2]
[2,4]]
self.masses[1].l = [[0,0]
[3,4]
[6,8]]
self.masses[2].l = [[0,0]
[5,6]
[10,12]]
相反,每个l
数组只是设置为solution
数组
你可以用列表来理解。它比普通环路快。
我不知道
masses
中存储了什么对象,因此为了这个示例,让我使用masses
作为一个简单的列表masses
是:这应该是你想要的
猜猜如何在
masses
列表中使用它,应该是:只需确保您的
self.masses
列表中有足够的对象,否则您将得到一个IndexError
评论后编辑
如果
solution
是一个Mx2N numpy数组,可以这样做:masses
是:正如我在评论中所说的,如果使用前面提到的列表理解,但是每个
masses
条目将是一个1dnumpy数组的列表。现在每个masses
条目都是一个2D numpy数组。我不确定效率,但试试看:numpy indexing相当快。
但是,如果您正在处理大量的数据,那么在某个时候您只需要忍受它。优化是有限度的
在OOP设置中,您可能有一个方法来填充
self.masses
属性列表。应该是这样的:在这种情况下,恐怕没有简单的方法来避免
for
循环,因为您需要在已经存在的对象列表上循环相关问题 更多 >
编程相关推荐