Я не совсем понимаю, как обрабатываются измерения np.zeros ().
У меня есть pandas фрейм данных с некоторыми игрушечными данными
# A toy 3col x 4row Dataframe
a = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[10,11,12]],columns=['colA','colB','colC'])
b = pd.DataFrame([[40,41,42],[43,44,45],[46,47,48],[49,50,51]],columns=['colA','colB','colC'])
colA colB colC
0 1 2 3
1 4 5 6
2 7 8 9
3 10 11 12
Я хочу получить эти два кадры данных в массив измерений 3D numpy (4 строки, 3 протокола, 2 канала), поэтому я могу рассчитать статистику между двумя кадрами данных (например, среднее, максимальное значения и т. д. c ...)
Поэтому я в основном создаю трехмерный массив нулей и заполняю каждый канал значениями из данных. Но похоже, что размеры расположены неправильно.
c = np.zeros((4, 3, 2))
c[:,:,0] = a.values
c[:,:,1] = b.values
array([[[ 1., 40.],
[ 2., 41.],
[ 3., 42.]],
[[ 4., 43.],
[ 5., 44.],
[ 6., 45.]],
[[ 7., 46.],
[ 8., 47.],
[ 9., 48.]],
[[10., 49.],
[11., 50.],
[12., 51.]]])
Если в качестве первого индекса указать число каналов, то оно будет правильно расположено. Однако это очень нелогично, обычно в трехмерных данных канал является третьим, а не первым индексом.
c = np.zeros((2,4,3))
c[0,:,:] = a.values
c[1,:,:] = b.values
array([[[ 1., 2., 3.],
[ 4., 5., 6.],
[ 7., 8., 9.],
[10., 11., 12.]],
[[40., 41., 42.],
[43., 44., 45.],
[46., 47., 48.],
[49., 50., 51.]]])
Я не понимаю эту логику c. Почему третье измерение (канал) является первым индексом, а не последним?
Когда я вычисляю среднее значение по двум каналам, я должен сделать это, используя axis=0
, что очень запутанно. Любой, кто смотрит на код, подумает, что это среднее по столбцам, а не среднее между каналами.
Я что-то не так делаю?