Получить подмассив из 3d-матрицы, зафиксировав одну ось, как в индексе NumPy + срезы - PullRequest
0 голосов
/ 18 сентября 2018

Мой вход - это массив 3x3x3, такой как этот:

m = [[[0, 1, 2], [3, 4, 5], [6, 7, 8]],
     [[9, 10, 11], [12, 13, 14], [15, 16, 17]],
     [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]

И вот те выводы, которые я хотел бы получить, используя только векторные или матричные операции:

out1 = [[0,1,2],[3,4,5],[6,7,8]]      (corresponding to indice 0 along first axis)
out2 = [[0,1,2],[9,10,11],[18,19,20]] (corresponding to indice 0 along second axis)
out3 = [[0,3,6],[9,12,15],[18,21,24]] (corresponding to indice 0 along third axis)

Я знаю, что могу сделать это с помощью Python, используя numpy следующим образом:

cube = np.arange(27).resize(3,3,3)
out1 = cube[0,:,:]
out2 = cube[:,0,:]
out3 = cube[:,:,0]

Но мне нужно реализовать это в javascript.Я знаю, как сделать это с помощью циклов и индексов, но я подумал, что может быть более эффективный способ сделать это.

1 Ответ

0 голосов
/ 19 сентября 2018

Использование пакета numjs, который стремится пересадить NumPy на JS (в частности, ndarray.pick из базового пакета scijs/ndarray ):

var m = nj.array([[[0, 1, 2], [3, 4, 5], [6, 7, 8]],
     [[9, 10, 11], [12, 13, 14], [15, 16, 17]],
     [[18, 19, 20], [21, 22, 23], [24, 25, 26]]]);

console.log(m.pick(0,null,null));
<script src="https://cdn.jsdelivr.net/gh/nicolaspanel/numjs@0.15.1/dist/numjs.min.js"></script>

Отпечатки:

"[[0,1,2],[3,4,5],[6,7,8]]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...