首先,我要对这个问题的随意性表示歉意,但是我正在重写我的一些脚本,以使用numpy数组而不是嵌套的python列表(用于性能和内存),但是我仍然在努力实现它们的声明。
我正试图使用numpy数组创建一个结构,首先从数组中的1000个(任意值)元素开始,每个元素都应该包含一个浮点(如[x][0])和一个包含坐标的嵌套数组(如每个顶层元素10.0000 x 2个浮点)(如[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:矩阵可能是更好的选择?
最佳答案
>>> 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)。如果你只做那些只看其中一个数组的操作,那就没问题了。使用单独的(100010000,2)数组可以更好地利用numpy中的矢量化操作。例如,可以在一次操作中增加所有第二个坐标,如下所示:
>>> b = np.zeros((1000,10000,2))
>>> b[:,:,1] += 1
尝试对
a[:][1][:,1]
执行相同操作是错误的。