【问题标题】:efficient way for replacing sub-arrays within numpy array - numpy.put or similar?替换 numpy 数组中的子数组的有效方法 - numpy.put 还是类似的?
【发布时间】:2014-09-30 18:02:51
【问题描述】:

我有一个很长的列表,称为“颜色”,其中包含长度为 4 的元组。 我需要用其他元组替换其中的一些元组(或者更具体地说,我需要替换的所有元组都应该替换为对应于颜色“红色”的元组 (1.,0.,0.,1.) ' 在 matplotlib 中)。我知道我需要替换的元组的索引 - 存储在一个名为“indices”的列表中,长度为“li”。

我当然可以使用:

for i in range(li):
  colours[indices[i]] = (1.,0.,0.,1.)

但是因为“颜色”列表的长度是 400*400 个元素,所以这种替换需要相当长的时间。我想知道是否有更快更优雅的方法来做到这一点?

我尝试将“颜色”转换为 numpy.array(它仍然适用于 matplotlib),然后使用 numpy.put 方法:

n.put(colours, indices, [(1.,0.,0.,1.)]*li)

但这不起作用,因为 n.put 不是替换整个元组,而是将颜色中的元组的子元素(即单个数字)替换为 (1.,0.,0) 中的另一个数字.,1.)-元组。

大家有什么建议吗?

【问题讨论】:

    标签: python arrays list numpy matplotlib


    【解决方案1】:

    如果您将colours 转换为 NumPy 数组,那么您可以使用所谓的"advanced (integer) indexing" 来进行赋值:

    colours = np.array(colours)
    colours[indices, :] = (1, 0, 0, 1)
    

    【讨论】:

    • 嗯,对不起,也许我不清楚 - colours[li,:] 只用索引“li”替换元组,但我需要用这个列表中称为“索引”的索引替换所有元组"(和 li=length(索引))
    • 糟糕,我读错了变量名。但是,它将适用于列表indices
    猜你喜欢
    • 1970-01-01
    • 2012-06-09
    • 1970-01-01
    • 2017-05-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2017-02-06
    • 2023-03-07
    相关资源
    最近更新 更多