3

首先,我要对这个问题的随意性表示歉意,但我正在重写我的一些脚本以使用 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:矩阵可能是更好的选择?

4

1 回答 1

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]是一个错误。

于 2013-04-05T09:31:21.563 回答