выбор индекса массива, как в NumPy, но в JavaScript - PullRequest
0 голосов
/ 05 октября 2018

У меня есть массив 3x3:

var my_array = [[0,1,2],
                [3,4,5],
                [6,7,8]];

и я хочу получить его первый блок 2x2 (или любой другой блок 2x2):

[[0,1], 
 [3,4]]

с numpy.написано:

my_array = np.arange(9).reshape((3,3))
my_array[:2, :2]

для получения правильного результата.

Я пробовал в javascript:

my_array.slice(0, 2).slice(0, 2);

, но второй фрагмент влияет на первое измерение, ничего не делая.Я обречен использовать для цикла или есть какой-то новый синтаксис ES6, который сделает мою жизнь проще?

Ответы [ 6 ]

0 голосов
/ 05 октября 2018

Если вы собираетесь много работать с матрицами, то вам стоит проверить math.js .

Попробуйте выполнить следующее:

var my_array = [[0,1,2],
                [3,4,5],
                [6,7,8]];

var matrix = math.matrix(my_array);

var subset = matrix.subset(math.index([0, 1], [0, 1]));

Рабочая пример .

0 голосов
/ 05 октября 2018

const input = [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8]
];
let result =[]
input.forEach(([a, b], index) => {if(index < 2) result.push([a, b])})

console.log(result);
0 голосов
/ 05 октября 2018

Вы можете взять объекты для индексов и для длины нужных вложенных массивов. Затем нарезать и отобразить нарезанные вложенные массивы.

var array = [[0, 1, 2], [3, 4, 5], [6, 7, 8]],
    length = { x: 2, y: 2 },
    indices = { i: 0, j: 0 },
    result = array.slice(indices.i, indices.i + length.x).map(a => a.slice(indices.j, indices.j + length.y));
    
console.log(result);
0 голосов
/ 05 октября 2018

Это не похоже на массив 3x #, это всего лишь массив массивов.

Вы можете сначала использовать слайс, чтобы получить массив только из первых двух элементов, который

[[0, 1, 2],[3, 4, 5]]

затем используйте Reduce для возврата нового массива и внутри него получите только первые два значения

var my_array = [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8]
];

let x = my_array.slice(0, 2).reduce(function(acc, curr) {
  acc.push(curr.slice(0, 2))
  return acc;
}, [])
console.log(x)
0 голосов
/ 05 октября 2018

Можно использовать комбинацию Array.slice и Array.map:

const input = [
  [0, 1, 2],
  [3, 4, 5],
  [6, 7, 8]
];

const result = input.slice(0, 2).map(arr => arr.slice(0, 2));

console.log(result);
0 голосов
/ 05 октября 2018

Вы можете использовать .map() и .slice() методы:

var my_array = [[0,1,2],
                [3,4,5],
                [6,7,8]];
                
var result = my_array.slice(0, 2).map(a => a.slice(0, 2));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
...