2013-04-05 147 views
3

首先我会道歉这个问题的任意性,但我重写了一些我的脚本使用Numpy数组而不是嵌套的Python列表(对于性能和内存),但我仍然努力与他们的声明。我试图创建一个使用numpy数组的结构,我从数组中的1000(任意值)元素开始,其中每个元素都应该包含一个float(as [x] [0])和一个嵌套数组,其中包含一个嵌套数组,其中包含一个嵌套数组,其中包含一个嵌套数组,其中包含一个嵌套数组,坐标(因此10.0000 x 2浮动PER顶层元素)(as [x] [1],嵌套数组中的每个元素都可以[x] [1] [y] [z]访问,其中y是嵌套数组中的元素z指定2个坐标中的哪一个)。以下问题Nested Structured Numpy Array创建了几乎相同的结构(作为我的问题和我期望的结构的参考)。Numpy阵列创建

原理图的原始数据例如:

time 0 
    m/z 10 int 10 
    m/z 20 int 20 
    m/z 30 int 1000 
    ... 
time 1 
    <repeat> 

我已阅读,我haveto使用D型部分来定义嵌套的数组,但我不是在尺寸空数组的声明部分十分清楚,可能有谁给我一只手?这是我到目前为止所提出的。

data=np.zeroes((1000,2 /* Now add nested array */), dtype=[('time', 'f'), [('m/z','f'), ('intensity','f')]])

PS:矩阵可能是这更好的选择吗?

+0

'y'在[x] [1] [y] [z]中的含义是什么? – 2013-04-05 09:07:14

+0

嵌套数组的元素。我在OP中犯了一个错字(x应该读为y,让我解决这个问题)。 – 2013-04-05 09:10:08

+0

您可以尝试使用[pandas dataframe](http://pandas.pydata.org/)。 – MaxPowers 2013-04-05 09:27:09

回答

6
>>> a = np.zeros(1000, dtype='float32, (10000,2)float32') 
>>> a[200][0] 
0.0 
>>> a[200][1][2000] 
array([ 0., 0.], dtype=float32) 

请注意,这会创建1000个维数组(10000,2)。这很好,如果你只做过只看其中一个数组的操作。使用单独的(1000,10000,2)数组可以更好地利用NumPy中的矢量化操作。例如,你可以增加所有第二坐标在一个操作是这样的:

>>> b = np.zeros((1000,10000,2)) 
>>> b[:,:,1] += 1 

试图做同样的a[:][1][:,1]是错误的。

+0

宾果,谢谢;) – 2013-04-05 09:32:36

+0

@BasJansen你也可以考虑两个单独的数组,一个用于1000个浮点数,另一个用于形状(1000,10000,2)。 – 2013-04-05 09:34:44