Есть ли какая-либо функция в R, Python, Lua, Java, Matlab или любом языке программирования, которая может уменьшить размер 3D input_array от c (6, 6, 6) до c (4, 4, 4) путем удаления всех нулевых матриц на периферии трех измерений?R - Измените размер 3D-массива, удалив все-нулевые 2D-матрицы из размеров x, y и z.
## Create an empty array with all zeros
input_array <- array(data = c(0), dim = c(6, 6, 6))
## Populate the central locations of the array with 1
input_array[, ,2:5] <- matrix(c(0, 0, 0, 0, 0, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 1, 1, 1, 1, 0,
0, 0, 0, 0, 0, 0),
nrow = 6, ncol = 6)
## Show the input_array
input_array
## The target output
output_array <- array(data = c(1), dim = c(4, 4, 4))
Так, другими словами, я ищу функцию, которая принимает input_array в качестве входных данных и плюет output_array как выход. Я хочу сохранить 3D-характер массива во время преобразования. Причина, по которой я рассматриваю это, заключается в том, что у меня очень большие 3D-массивы с множеством нулей по периферии и путем удаления матриц всех нулей из трех измерений, я могу добиться значительного уменьшения размеров этих массивов и, следовательно, позволить для более эффективной обработки.
В случае отсутствия функции, что может быть логикой для написания новой функции, чтобы это сделать? Используйте любой язык, который вы предпочитаете, если у вас есть что поделиться, любая обратная связь или помощь очень ценятся.
Предполагается, что нужно сбрить поверхности на основании того, все ли они ноль (если так: неоднократно?) Или только один с каждой стороны? –
несколько раз, пока поверхность является полностью нулевой, это может быть одна поверхность или несколько. – mansanto
Выберите язык. Все еще работает более элегантно в R, но функционально: 'input_array [apply (input_array, 1, function (x) {any (x! = 0)}), apply (input_array, 2, function (x) {any (x! = 0)}), apply (input_array, 3, function (x) {any (x! = 0)})] ' – alistaire