0

我有一个 coremlmodel 输入形状MultiArray (Float32 67 x 256 x 320) 我很难塑造这个模型的输入。目前,我正在尝试像这样实现它,

var m = try! MLMultiArray(shape: [67,256,320], dataType: .double)
for i in 0...66{           
    var cost = rand((256,320)) // this is coming from swix [SWIX]
    memcpy(m.dataPointer+i*256*320, &cur_cost.flat.grid , 256*320)
}

稍后我将不得不用这种大小的矩阵替换 rand。我首先将其用于测试目的。

任何关于如何塑造输入以适应体积的指针将不胜感激。

[斯维克斯]

4

1 回答 1

0

您的代码中似乎有问题的是您正在复制字节而不是双精度数。double 是 8 个字节,所以你的偏移量应该是i*256*320*MemoryLayout<Double>.stride,你复制的量应该是256*320*MemoryLayout<Double>.stride.

请注意,您还可以使用 MLMultiArray 的strides属性来计算数组中给定数据元素的偏移量:

let offset = i0 * strides[0].intValue + i1 * strides[1].intValue + i2 * strides[2].intValue 
于 2018-08-23T11:04:02.550 回答