Участок 3-й оси трехмерного массива - PullRequest
0 голосов
/ 18 сентября 2018

У меня есть трехмерный массив, который представляет собой стек 2D (m, n) изображений с определенными временными метками, t.Так что мой массив имеет форму (т, м, п).Я хочу построить значение одного из пикселей как функцию времени.

Например:

import numpy as np
import matplotlib.pyplot as plt

data_cube = []
for i in xrange(10):
    a = np.random(100,100)
    data_cube.append(a)

Так что my (t, m, n) теперь имеет форму (10 100 100).Скажем, я хотел, чтобы одномерный график отображал значение индекса [12] [12] на каждом из 10 шагов, которые я сделал бы:

plt.plot(data_cube[:][12][12])
plt.show()

Но я получаю индекс из-за ошибок диапазона.Я думал, что мои индексы могут быть перепутаны, но каждый график, который я генерирую, кажется, находится на «неправильной» оси, то есть поперек одного из 2D-массивов, но вместо этого я хочу, чтобы он «проходил» через вертикальный стек.Заранее спасибо!

1 Ответ

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

Вот решение: поскольку вы уже используете numpy, преобразуйте ваш окончательный список в массив и просто используйте нарезку.Проблема в вашем случае была двоякой:

Первое: ваш последний data_cube не был массивом.Для списка вам нужно будет перебрать значения

Секунда: нарезка была неправильной.

import numpy as np
import matplotlib.pyplot as plt

data_cube = []
for i in range(10):
    a = np.random.rand(100,100)
    data_cube.append(a)
data_cube = np.array(data_cube)   # Added this step 

plt.plot(data_cube[:,12,12]) # Modified the slicing

Вывод

enter image description here

Менее многословная версия, позволяющая избежать итерации:

data_cube = np.random.rand(10, 100,100)
plt.plot(data_cube[:,12,12])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...