解决numpy.ndarray无index属性错误:查找数组元素索引
解决方法
错误原因
你遇到的AttributeError是因为numpy数组没有index()方法,这是Python内置列表的专属方法,不能直接用在numpy数组上。另外你的循环逻辑也存在问题:遍历svmoutput时,t是数组里的元素值(比如示例中的-1、1),不是索引位置,用svmoutput[t]会导致索引越界或错误。
正确实现方式
numpy提供了更高效的向量化操作完成这个需求,不需要手动循环:
方法1:布尔索引(推荐)
直接生成布尔掩码筛选目标位置,一步获取对应元素:
# 生成布尔掩码,标记svmoutput中值为1的位置 mask = svmoutput == 1 # 用掩码提取cluster0Data中对应位置的元素 ultimate = cluster0Data[mask]
方法2:使用np.where获取索引
先找到所有值为1的索引,再按索引提取元素:
# 获取svmoutput中值为1的所有索引([0]是取where返回的索引数组) indices = np.where(svmoutput == 1)[0] # 根据索引提取cluster0Data的对应元素 ultimate = cluster0Data[indices]
示例验证
以你给出的svmoutput = [-1 1 1 -1]为例:
- 方法1的
mask会是[False, True, True, False],ultimate会取cluster0Data的第2、3个元素(numpy索引从0开始)。 - 方法2的
indices会是array([1, 2]),同样能提取对应位置的元素。
内容的提问来源于stack exchange,提问作者MinaMRM
相关产品推荐
相关产品推荐

