jjjkkkjjj / Matft

Numpy-like library in swift. (Multi-dimensional Array, ndarray, matrix and vector library)
BSD 3-Clause "New" or "Revised" License
134 stars 21 forks source link

Convert MfArray back to regular Swift's Array with a specific type #14

Closed alwc closed 4 years ago

alwc commented 4 years ago

Hi @jjjkkkjjj . After I did some math transformations in a MfArray, I want to convert it back to a Swift's Array. What's the most efficient way to do it using your library?

For example, I want to convert the MfArray back to [Int]. Right now I'm doing it this way:

let swiftArrayAny = Array(someMfArray).data)

guard let swiftArrayInt32 = swiftArrayAny as? [Int32] else {
    fatalError()
}

let swiftArrayInt = swiftArrayInt32.map { Int($0) }
jjjkkkjjj commented 4 years ago

@alwc If you want N-dimensional array, use toArray function I just implemented. e.g.)

let a = MfArray([[2, -7, 0],
                             [1, 5, -2]])
guard let swiftNdArray = a.astype(.Int32).toArray() as? [[Int32]] else{ fatalError() }
print(swiftNdArray)
/*
[[ 2, -7,  0],
[ 1,  5, -2]]
*/

Or, if you want flatten array, use flatten function and toArray like this

let a = MfArray([[2, -7, 0],
                             [1, 5, -2]])
guard let swiftFlattenArray = a.astype(.Int32).flatten().toArray() as? [Int32] else{ fatalError() }
print(swiftFlattenArray)
/*
[ 2, -7,  0,  1,  5, -2]
*/
jjjkkkjjj commented 4 years ago

From now, you can get swift's Array with Int by toArray method of MfArray with MfType.Int like this;

let a = MfArray([[2, -7, 0],
                             [1, 5, -2]])
guard let swiftNdArray = a.toArray() as? [[Int]] else{ fatalError() }
print(swiftNdArray)
/*
[[ 2, -7,  0],
[ 1,  5, -2]]
*/

guard let swiftFlattenArray = a.flatten().toArray() as? [Int] else{ fatalError() }
print(swiftFlattenArray)
/*
[ 2, -7,  0,  1,  5, -2]
*/
alwc commented 4 years ago

Thanks @jjjkkkjjj !