【发布时间】:2014-12-08 16:05:21
【问题描述】:
我想知道是否有一种方法可以使用一个列表或一个 int 数组作为索引来切片到一个数组中以获得 f# 中的一个子数组。
我知道你可以做到以下几点
Arr2d.[*,1] or Arr2d.[1..5,1..2] etc...
但我一直在寻找类似 Matlab 中可以编写的东西:
Arr2d([1;6;10],1) or Arr2d(1:10,[1;6;10])
是否可以在 F# 中进行这样的切片?
谢谢!
这是我的示例解决方案:(可能不是最佳但有效)
let sampleMatrix = Array2D.init 10 5 (fun x y -> y)
val sampleMatrix : int [,] = [[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]
[0; 1; 2; 3; 4]]
let idxlist = [1;3;4]
let array2dColumnSlice (idxlist:list<int>) (data:'T[,]) =
let tmp = [|for i in idxlist -> data.[*,i]|]
Array2D.init tmp.[0].Length tmp.Length (fun x y -> tmp.[y].[x] )
let slice = array2dColumnSlice idxlist sampleMatrix
val slice : int [,] = [[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]
[1; 3; 4]]
【问题讨论】:
标签: f# f#-interactive f#-3.0 c#-to-f# f#-data