在python中使用的最佳数据结构,用于存储命名数据的3维多维数据集

Jos*_*osh 3 python numpy data-analysis data-structures pandas

我想要一些有关数据结构选择的反馈。我有一个用于特定电压值的2D XY网格的电流值。我有几个电压步骤,并将数据组织到一个XY-Voltage多维数据集中。我在这里说明了轴:http : //imgur.com/FVbluwB

我目前在python字典中使用numpy数组,用于我要扫描的另一种晶体管。我不确定这是否是最好的方法。我看过熊猫,但也不确定这是否对熊猫好。希望有人能帮助我,让我可以学会做Python!生成一些测试数据的代码和最终结构如下。

谢谢!

import numpy as np

#make test data

test__transistor_data0 = {"SNMOS":np.random.randn(3,256,256),"SPMOS":np.random.randn(4,256,256), "WPMOS":np.random.randn(6,256,256),"WNMOS":np.random.randn(6,256,256)}
test__transistor_data1 = {"SNMOS":np.random.randn(3,256,256), "SPMOS":np.random.randn(4,256,256), "WPMOS":np.random.randn(6,256,256), "WNMOS":np.random.randn(6,256,256)}
test__transistor_data2 = {"SNMOS":np.random.randn(3,256,256), "SPMOS":np.random.randn(4,256,256), "WPMOS":np.random.randn(6,256,256), "WNMOS":np.random.randn(6,256,256)}
test__transistor_data3 = {"SNMOS":np.random.randn(3,256,256), "SPMOS":np.random.randn(4,256,256), "WPMOS":np.random.randn(6,256,256), "WNMOS":np.random.randn(6,256,256)}


quadrant_data = {"ne":test__transistor_data0,"nw":test__transistor_data1,"sw":test__transistor_data2,"se":test__transistor_data3} 
Run Code Online (Sandbox Code Playgroud)

chr*_*isb 5

值得一看xarray,它很像(部分基于)pandas,但专为N维数据而设计。

它的两个基本容器是a DataArray(是标记的ND数组)和aa Dataset(是DataArrays 的容器)。

In [29]: s1 = xray.DataArray(np.random.randn(3,256,256), dims=['voltage', 'x', 'y'])

In [30]: s2 = xray.DataArray(np.random.randn(3,256,256), dims=['voltage', 'x', 'y'])

In [32]: ds = xray.Dataset({'SNMOS': s1, 'SPMOS': s2})

In [33]: ds
Out[33]: 
<xray.Dataset>
Dimensions:  (voltage: 3, x: 256, y: 256)
Coordinates:
  * voltage  (voltage) int64 0 1 2
  * x        (x) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
  * y        (y) int64 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 ...
Data variables:
    SPMOS    (voltage, x, y) float64 -1.363 2.446 0.3585 -0.8243 -0.814 ...
    SNMOS    (voltage, x, y) float64 1.07 2.327 -1.435 0.4011 0.2379 2.07 ...
Run Code Online (Sandbox Code Playgroud)

这两个容器都有很多不错的功能(请参阅文档),例如,如果您想知道x每个传输器的最大电压值(在第一个电压电平下),则如下所示:

In [39]: ds.sel(voltage=0).max(dim='x').max()
Out[39]: 
<xray.Dataset>
Dimensions:  ()
Coordinates:
    *empty*
Data variables:
    SPMOS    float64 4.175
    SNMOS    float64 4.302
Run Code Online (Sandbox Code Playgroud)