一种在矩阵中交换F#中行的简单方法

时间:2010-05-31 21:46:04

标签: f# matrix row

是否有一种简单的方法可以在F#中交换Matrix的行?

2 个答案:

答案 0 :(得分:2)

您可以使用切片语法来处理矩阵的整行/列:

// Create sample matrix
let m = Matrix.init 10 10 (fun x y -> float(x * 10 + y))
// Overwrite first row with the second row
m.[0..0, 0..9] <- m.[1..1, 0..9]

切片语法允许您选择矩阵的一部分 - 在这种情况下,我们选择高度为1的矩阵,但您可以更普遍地使用该功能(该部分不必是单个列/行)。我认为没有任何现有的交换两行的功能,但你可以使用切片并像这样实现:

let swap (m:matrix) a b = 
  let tmp = m.[a..a, 1..9]
  m.[a..a, 1..9] <- m.[b..b, 1..9]
  m.[b..b, 1..9] <- tmp

答案 1 :(得分:2)

这是使用Matrix类型的成员函数PermuteRows的另一种方式:

let m = Matrix.init 10 10 (fun x y -> float(x * 10 + y))
let m2 = m.PermuteRows (fun i -> 9 - i) 

您需要提供行映射功能,此处为(i -> 9 - i)