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

计算SAVI出现TypeError: return arrays must be of ArrayType

问题根因

报错来自np.add()的参数误用:

  • NumPy中np.add(x1, x2)的作用是计算x1 + x2,函数的第三个位置参数是out,用来指定计算结果的输出存放对象,要求必须是NumPy数组类型
  • 你写的np.add(ir,r,c)本意是计算ir + r + c,但实际上把浮点数c=0.5传给了要求数组类型的out参数,直接触发了TypeError: return arrays must be of ArrayType错误。

另外原代码里savi = np.zeros(r.size)是冗余代码,后续计算赋值时会直接覆盖这个初始化的数组,没有实际作用。

修正方案

最推荐直接用原生算术运算符实现,可读性强,不会出现API参数记忆错误的问题,逻辑完全匹配SAVI公式:

import numpy as np

# SAVI - Soil Adjusted Vegetation Index
# 计算公式:SAVI = (ir - red) * (1 + c) / (ir + red + c)
c = 0.5
ir = img[:, :, 0].astype('float')
r = img[:, :, 2].astype('float')
savi = (ir - r) * (1 + c) / (ir + r + c)

如果需要严格使用NumPy的算术函数实现,注意np.add单次仅支持两个操作数相加,需要嵌套调用,不要把待加常数错传给out参数:

savi = np.true_divide(
    np.multiply(np.subtract(ir, r), 1 + c),
    np.add(np.add(ir, r), c)
)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 19:39:17