Эквивалентная индексация Numpy python - PullRequest
0 голосов
/ 25 февраля 2019
import numpy as np

o = np.array([

              [
              [1,2,3,4],
              [5,6,7,8]
              ],

              [
              [9,10,11,12],
              [13,14,15,16]
              ]

             ])
print(o.flatten())

# array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16])

Сначала сглаживает строку каждой матрицы

Но я хочу, чтобы сначала сглаживался столбец каждой матрицы, чтобы она печаталась [1,5,2,6,3,7,4, 8,9,13,10,14,11,15,12,16]

Я попытался найти, и то, что я нашел, передавало "F" в качестве аргумента, но это дает [1,5,9,13,2,6,10,14,3,7,11,15,4,8,12,16], то есть он переключается на другую матрицу, не завершив сначала.

Короче, я бы хотелнайти Python эквивалент индексации R в двойных скобках

someData <- rep(0, 2*3*4);
ar <- array(someData, c(2, 3, 4));  
ar[1,1,1] = 1
ar[1,2,1] = 2
ar[1,3,1] = 3

ar[2,1,1] = 4
ar[2,2,1] = 5
ar[2,3,1] = 6

ar[1,1,2] = 7
ar[1,2,2] = 8
ar[1,3,2] = 9
print(ar[[1]]) # 1
print(ar[[2]]) # 4
print(ar[[3]]) # 2
print(ar[[4]]) # 5 
print(ar[[5]]) # 3
print(ar[[6]]) # 6

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете начать с np.concatenate во втором измерении, а затем flatten в порядке основной колонки, как вы также упомянули:

np.concatenate(o, axis=1).flatten(order='f')

Выход

array([ 1,  5,  2,  6,  3,  7,  4,  8,  9, 13, 10, 14, 11, 15, 12, 16])
...