交换矩阵两行报错

swapRow

改成如下可以运行,我也不理解。但你还要注意用field的element作为参数时,传值不传引用,你要让swapRow返回交换行之后的矩阵。

def swapRow(A, i, maxRow):
    for k in ti.static(range(3)):
        temp = A[i,k]
        A[i,k] = A[maxRow,k]
        A[maxRow,k] = temp
def mat_read(A: ti.template(), i, j):
  ret = A[0,0]
  for ii in ti.static(range(3)):
    for jj in ti.static(range(3)):
      if i == ii and j == jj:
        ret = A[ii,jj]
  return ret

def mat_write(A: ti.template(), i, j, val):
  for ii in ti.static(range(3)):
    for jj in ti.static(range(3)):
      if i == ii and j == jj:
        A[ii,jj] = val

def swapRow(A, i, maxRow):
    for k in ti.static(range(3)):
        temp = A[i,k]
        A[i,k] = mat_read(A,maxRow,k)
        mat_write(A,maxRow,k, temp)

试试看用这两个函数?

2 个赞

可以了,谢谢你