Я не знаю конкретно о массивах ArrayFire, но в целом вы можете использовать reinterpret
для таких операций. Если вы хотите, чтобы новый массив находился на процессоре, скопируйте его.
Тогда, в идеале, вы могли бы просто сделать
rgb = reinterpret(RGB{Float32}, A)
К сожалению, MxNx3 не является оптимальным расположением для массивов RGB, поскольку вы хотите, чтобы 3 значения располагались последовательно. Таким образом, вы должны либо убедиться, что массив имеет 3xMxN-разметку, либо вы можете сделать permutedims(A, (3, 1, 2))
.
Наконец, чтобы получить матрицу, вы должны отбросить ведущее одноэлементное измерение, иначе вы получите массив размером 1xMxN.
So,
rgb = dropdims(reinterpret(RGB{Float32}, permutedims(A, (3, 1, 2))); dims=1)
Я предположил, что вы действительно хотите RGB{Float32}
вместо RGB{Any}
.
Кстати, я не уверен, как это будет работать, если вы хотите сохранить окончательный массив на графическом процессоре.
Редактировать: вы можете выбрать reshape
вместо dropdims
, на моем компьютере это кажется немного быстрее.
person
DNF
schedule
19.10.2020