亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Gonum 在使用嵌入式結構時拋出壞區恐慌

Gonum 在使用嵌入式結構時拋出壞區恐慌

Go
躍然一笑 2023-03-21 16:59:00
我正在使用 gonum 執行一些線性代數計算。擴展原始mat.VecDense結構后,在對自身應用方法時出現“壞區域:相同”恐慌。當我使用 gonum 提供的原始設置時,不會出現此錯誤。這是我的實現:type Vector struct {    mat.VecDense}func NewVector(n int, data []float64) *Vector {    return &Vector{*mat.NewVecDense(n, data)}}我正在使用以下代碼片段對其進行測試:func main() {    u, v := mat.NewVecDense(3, []float64{1, 2, 3}), mat.NewVecDense(3, []float64{4, 5, 6})    fmt.Printf("[U - NewVecDense]\tADDRESS: %v, VALUE: %v\n", &u, u)    fmt.Printf("[V - NewVecDense]\tADDRESS: %v, VALUE: %v\n", &v, v)    u.AddVec(u, v)    fmt.Println("-------------------------")    x, y := NewVector(3, []float64{1, 2, 3}), NewVector(3, []float64{4, 5, 6})    fmt.Printf("[X - NewVector]\tADDRESS: %v, VALUE: %v\n", &x, x)    fmt.Printf("[Y - NewVector]\tADDRESS: %v, VALUE: %v\n", &y, y)    x.AddVec(x, y)    fmt.Println(x)}雖然第一次添加執行正常,但第二次失?。篬U - NewVecDense]   ADDRESS: 0xc42000c028, VALUE: &{{[1 2 3] 1} 3}[V - NewVecDense]   ADDRESS: 0xc42000c030, VALUE: &{{[4 5 6] 1} 3}-------------------------[X - NewVector] ADDRESS: 0xc42000c040, VALUE: &{{{[1 2 3] 1} 3}}[Y - NewVector] ADDRESS: 0xc42000c048, VALUE: &{{{[4 5 6] 1} 3}}panic: mat: bad region: identicalAddVec是gonum 實現的方法:func (v *VecDense) AddVec(a, b Vector)為什么會發生這種情況,手實施這個的正確方法是什么?
查看完整描述

2 回答

?
茅侃侃

TA貢獻1842條經驗 獲得超21個贊

在 Golang 中,將提升的方法描述為

提升字段的作用類似于結構的普通字段,只是它們不能用作結構的復合文字中的字段名稱。

給定結構類型 S 和定義類型 T,提升的方法包含在結構的方法集中,如下所示:

  • 如果 S 包含一個嵌入字段 T,則 S 和 *S 的方法集都包括接收者為 T 的提升方法。*S 的方法集還包括接收者為 *T 的提升方法。

  • 如果 S 包含嵌入字段 *T,則 S 和 *S 的方法集都包含接收者為 T 或 *T 的提升方法。

問題是您將指針類型參數傳遞給AddVec函數。但是在第二種情況下您使用的是指針類型字段。

func (v *VecDense) AddVec(a, b Vector)

需要注意的另一件事是它AddVec具有 struct 的值類型參數Vector,但您將指針傳遞給Vector字段

x, y := NewVector(3, []float64{1, 2, 3}), NewVector(3, []float64{4, 5, 6})

在上面的代碼中x,y是從返回的指針類型NewVector

x.AddVec(x, y)


查看完整回答
反對 回復 2023-03-21
?
千萬里不及你

TA貢獻1784條經驗 獲得超9個贊

問題是在進行陰影檢測時比較指針。這是海事組織的一個錯誤。我剛剛提交了https://github.com/gonum/gonum/issues/945


查看完整回答
反對 回復 2023-03-21
  • 2 回答
  • 0 關注
  • 126 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號