2

当我尝试将矩阵发送到 proc 时出现错误。我很确定我做错了什么,无法弄清楚。

use LinearAlgebra;    
proc main() {
  var A = Matrix(
       [0.0, 0.8, 1.1, 0.0, 2.0]
      ,[0.8, 0.0, 1.3, 1.0, 0.0]
      ,[1.1, 1.3, 0.0, 0.5, 1.7]
      ,[0.0, 1.0, 0.5, 0.0, 1.5]
      ,[2.0, 0.0, 1.7, 1.5, 0.0]
      );

  check_dims(A);
}

proc check_dims(A: Matrix) { 
  var t: bool  = false;
  if (A.domain.dim(1) == A.domain.dim(2)){
    t = true;
  }
  return t;
}

给我

mad.chpl:3: In function 'main':
mad.chpl:14: error: unresolved call 'check_dims([domain(2,int(64),false)] real(64))'
mad.chpl:17: note: candidates are: check_dims(A: Matrix)

我正在使用chpl Version 1.15.0

4

1 回答 1

1

线性代数对象(如矩阵和向量)在 Chapel中表示为数组。因此,将Matrix(不存在的类型)更改为[](数组类型的语法)应该可以按预期工作:

use LinearAlgebra;    
proc main() {
  var A = Matrix(
       [0.0, 0.8, 1.1, 0.0, 2.0]
      ,[0.8, 0.0, 1.3, 1.0, 0.0]
      ,[1.1, 1.3, 0.0, 0.5, 1.7]
      ,[0.0, 1.0, 0.5, 0.0, 1.5]
      ,[2.0, 0.0, 1.7, 1.5, 0.0]
      );

  check_dims(A);
}

proc check_dims(A: []) { 
  var t: bool  = false;
  // method is dim()
  if (A.domain.dim(1) == A.domain.dim(2)){
    t = true;
  }
  return t;
}
于 2017-08-18T00:51:03.873 回答