You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决'tuple'对象不支持元素赋值问题:二维数组局部最大值索引存储

解决'tuple' object does not support item assignment的报错

这个报错主要有两个核心原因,咱们一步步来搞定:

1. 先修正maximums的初始化方式

你大概率是把maximums定义成了元组(比如maximums = ()或者maximums = tuple(...)),而元组是Python里的不可变类型,完全不支持maximums[i] = ...这种赋值操作。

你需要把maximums改成可变的序列类型,推荐两种方式:

  • 用列表初始化(最常用,后续处理灵活):
    # 提前创建一个包含200个空元素的列表
    maximums = [[] for _ in range(200)]
    
  • 或者用numpy对象数组(适合后续做批量数值处理):
    import numpy as np
    maximums = np.empty(200, dtype=object)
    

2. 正确处理argrelextrema的返回值

scipy.signal.argrelextrema的返回值是一个元组——哪怕你传入的是一维数组(比如b1[i]),它也会返回一个包含索引数组的单元素元组(格式类似(array([1,3,5]),))。如果直接把这个元组赋值,虽然不会触发当前报错,但后续处理索引时会额外踩坑。

所以你需要提取元组里的索引数组,也就是加个[0]:

修正后的完整代码

import scipy.signal
import numpy as np

# 假设b1是shape为(200, N)的二维数组
b1 = np.random.rand(200, 100)
maximums = [[] for _ in range(200)]

for i in range(200):
    # 提取当前一维数组对应的局部最大值索引
    peak_indices = scipy.signal.argrelextrema(b1[i], np.greater)[0]
    # 把索引存入maximums的对应位置
    maximums[i] = peak_indices.tolist()  # 转成列表,或者直接存numpy数组也可以

额外小提示

  • 如果b1的第一维长度不一定是200,建议用range(len(b1))代替range(200),这样代码更鲁棒,不会因为数组长度变化报错。
  • 如果你需要保存的是局部最大值的数值而不是索引,可以用b1[i][peak_indices]来获取。

内容的提问来源于stack exchange,提问作者bbb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 18:32:36