将大的 [MLMultiArray] 拆分成较小的块 [[MLMultiArray]]?
Split a large [MLMultiArray] into smaller chunks [[MLMultiArray]]?
我有一个长度为 15360 个值的大型 MLMultiArray。
样本:
Float32 1 x 15360
[14.78125,-0.6308594,5.609375,13.57812,-1.871094,-19.65625,9.5625,8.640625,-2.728516,3.654297,-3.189453,-1.740234...]
有没有一种方法可以将这个巨大的数组转换为 120 个小的 MLMultiArray,每个数组有 128 个元素,而无需更改此数组的顺序,并且以最有效的方式进行?
包含 15360 个元素的整个数组在此 Link
中可用
let chunkSize = 2
let shape = yourLargeArray.shape
let chunkedArrays = try? stride(from: 0, to: shape.count, by: chunkSize)
.map { offset -> MLMultiArray in
let startIndex = shape.index(shape.startIndex, offsetBy: offset)
let endIndex = shape.index(startIndex, offsetBy: chunkSize, limitedBy: shape.endIndex) ?? shape.endIndex
return try MLMultiArray(
shape: Array(shape[startIndex ..< endIndex]),
dataType: yourLargeArray.dataType
)
}
我有一个长度为 15360 个值的大型 MLMultiArray。
样本:
Float32 1 x 15360
[14.78125,-0.6308594,5.609375,13.57812,-1.871094,-19.65625,9.5625,8.640625,-2.728516,3.654297,-3.189453,-1.740234...]
有没有一种方法可以将这个巨大的数组转换为 120 个小的 MLMultiArray,每个数组有 128 个元素,而无需更改此数组的顺序,并且以最有效的方式进行?
包含 15360 个元素的整个数组在此 Link
中可用let chunkSize = 2
let shape = yourLargeArray.shape
let chunkedArrays = try? stride(from: 0, to: shape.count, by: chunkSize)
.map { offset -> MLMultiArray in
let startIndex = shape.index(shape.startIndex, offsetBy: offset)
let endIndex = shape.index(startIndex, offsetBy: chunkSize, limitedBy: shape.endIndex) ?? shape.endIndex
return try MLMultiArray(
shape: Array(shape[startIndex ..< endIndex]),
dataType: yourLargeArray.dataType
)
}