首先我会为这个问题的任意性道歉但是我正在重写我的一些脚本来使用Numpy数组而不是嵌套的python列表(用于性能和内存)但是我仍在努力使用它们的声明。
我正在尝试使用numpy数组创建一个结构,我开始在数组中使用1000(任意值)元素,其中每个元素应包含一个float(如[x] [0])和一个包含坐标的嵌套数组(所以10.0000 x 2浮动PER顶级元素)(如[x] [1],嵌套数组中的每个元素都可以作为[x] [1] [y] [z]访问,其中y是嵌套数组中的元素z指定了2个坐标中的哪个)。以下问题Nested Structured Numpy Array创建了一个相同的结构(作为我的问题和我想要的结构的参考)。
原理图原始数据示例:
time 0
m/z 10 int 10
m/z 20 int 20
m/z 30 int 1000
...
time 1
<repeat>
我已经读过我必须使用dtype部分来定义嵌套数组但是我不太确定空数组的维度部分,任何人都可以帮忙吗?这是我到目前为止所提出的。
data=np.zeroes((1000,2 /* Now add nested array */), dtype=[('time', 'f'), [('m/z','f'), ('intensity','f')]])
PS:矩阵可能是更好的选择吗?
答案 0 :(得分: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]
执行相同操作是错误的。