【发布时间】:2016-11-21 12:16:41
【问题描述】:
我有一个大数组,其中的一部分如下面的小示例所示。 在每个列表中,第一个数字是开始,第二个数字是结束 (所以有一个范围)但每个元素都是序列的一部分,并且 每个序列从零开始。 .我想做的是:
小例子:
array([[ 469, 1300],
[ 171, 1440],
[ 187, 1564],
[ 204, 1740],
[ 40, 1363],
[ 56, 1457],
[ 132, 606],
[1175, 2096],
[ 484, 2839],
[ 132, 4572],
[ 166, 1693],
[ 69, 3300],
[ 142, 1003],
[2118, 2118],
[ 715, 1687],
[ 301, 1006],
[ 48, 2142],
[ 63, 330],
[ 479, 2411]], dtype=uint32)
我想从索引为 0 的每个序列的开头开始 (不包括在范围内)直到 -20 之前 每个范围的开始。
我试过这段代码:
cds = np.column_stack([cdspos[:, 0] - cdspos[:, 0], cdspos[:, 0] - 20])
但它给出了这个错误:
y = _nx.arange(0, num, dtype=dt)
MemoryError
但我试试这个:
cds = np.column_stack([cdspos[:, 0] - 100, cdspos[:, 0] - 20])
完美运行。问题是我没有相同的范围 在起点之前(都不是100)。
所以,我想得到一个像这样的更小的范围(列表):(0)到 (开始 20)。例如第一个元素是这样的:
[ 0, 449]
我也试过了
cds = np.column_stack([0, cdspos[:, 0] - 20])
但没用。
对于这个小例子,我正在寻找的输出是这样的:
array([[0, 449],
[0, 151],
[0, 167],
[0, 184],
[0, 20],
[0, 36],
[0, 112],
[0, 1155],
[0, 464],
[0, 112],
[0, 146],
[0, 49],
[0, 122],
[0, 2098],
[0, 695],
[0, 281],
[0, 28],
[0, 43],
[0, 459]], dtype=uint32)
你们知道怎么做吗?
【问题讨论】:
-
我试过了,效果很好: cds1 = np.column_stack([np.zeros(len(cdspos), dtype="uint32") , cdspos[:, 1]])