在numpy数组中替换子数组的高效方法 - numpy.put或类似的?
我有一个很长的列表,叫做“colours”,里面包含了长度为4的元组。现在我需要把其中一些元组替换成其他的元组(更具体地说,我需要替换的所有元组都要换成元组(1.,0.,0.,1.),这个元组在matplotlib中代表颜色“红色”)。我知道需要替换的元组的索引,这些索引存储在一个叫“indices”的列表里,长度是“li”。
当然,我可以使用:
for i in range(li):
colours[indices[i]] = (1.,0.,0.,1.)
但是因为“colours”这个列表有400*400个元素,所以这个替换过程会花费比较长的时间。我在想有没有更快、更优雅的方法来做到这一点?
我尝试把“colours”转换成numpy.array(这样在matplotlib中仍然可以正常使用),然后使用numpy.put方法:
n.put(colours, indices, [(1.,0.,0.,1.)]*li)
但这样不行,因为n.put并不是把整个元组替换掉,而只是把元组中的某个元素(也就是一个数字)替换成(1.,0.,0.,1.)元组中的另一个数字。
有没有人有什么建议可以用来解决这个问题?
相关问题:
1 个回答
1
如果你把 colours 转换成一个 NumPy 数组,那么你就可以使用一种叫做“高级(整数)索引”的方法来进行赋值:
colours = np.array(colours)
colours[indices, :] = (1, 0, 0, 1)