如何按已知值为数组编制索引

How to index an array by known values

提问人:Luther Brown 提问时间:10/14/2022 最后编辑:Luther Brown 更新时间:10/16/2022 访问量:62

问:

我有一个 2D 数组,由左边的时间和右边的质量组成。我想将数组过滤为 10 年的 10 个已知值。因此,我的预期/期望输出如下:

array([[ 3.64990e+02, -4.09452e+06],
       [ 7.29730e+02, -5.45551e+06],
       [ 1.09450e+03, -6.39009e+06],
       [ 1.45910e+03, -7.15813e+06],
       [ 1.82380e+03, -7.87166e+06],
       [ 2.18860e+03, -8.58857e+06],
       [ 2.55340e+03, -9.33691e+06],
       [ 2.91820e+03, -1.01254e+07],
       [ 3.28310e+03, -1.09508e+07],
       [ 3.64790e+03, -1.18056e+07]])

如您所见,左边的数字是 1、2、3,..., 10 年(以天为单位)。我想要右边的数字,这些数字与这些年份中的每一年相对应。下面是数组开头和结尾的数据示例:

n = con = np.stack((times, mass), axis=1)
print(n)
[[ 2.77990e-01 -3.58090e+01]
 [ 5.55970e-01 -9.10160e+01]
 [ 8.33960e-01 -1.70890e+02]
 ...
 [ 3.64960e+03 -1.18096e+07]
 [ 3.64990e+03 -1.18103e+07]
 [ 3.65000e+03 -1.18106e+07]

以下是我尝试为所需值编制索引的方法,但没有奏效:

for ti, mi in n:
    for mi in [365,365*2,365*3,365*4,365*5,365*6,365*7,365*8,365*9,365*10]:
        print(ti,mi)

365 -35.809
730 -35.809
1095 -35.809
1460 -35.809
1825 -35.809
2190 -35.809
2555 -35.809
2920 -35.809
3285 -35.809
3650 -35.809
365 -91.016
730 -91.016
1095 -91.016
1460 -91.016
1825 -91.016
2190 -91.016
2555 -91.016
2920 -91.016
3285 -91.016
3650 -91.016
365 -170.89
730 -170.89
1095 -170.89
1460 -170.89
1825 -170.89
2190 -170.89
2555 -170.89
2920 -170.89
3285 -170.89
3650 -170.89
365 -282.73

它开始重复,右侧的值不正确。我不是程序员,所以我不确定我做错了什么。

python numpy 函数 循环 序列

评论

1赞 Abhi 10/14/2022
欢迎路德!请提供一些见解或示例值,说明您的预期输出是什么。这可能会让我们更好地理解!
0赞 Luther Brown 10/15/2022
嗨,谢谢。我更新了我的原始帖子。希望它更清楚。
0赞 Abhi 10/16/2022
请检查发布的解决方案!如果有帮助,请用赞成票将其标记为已接受,这样对其他人也有帮助。

答:

-1赞 Abhi 10/16/2022 #1

根据我的理解,您拥有并且您想根据以下代码中的值过滤值。timemasses2d arraytimefirst elementsub-array

num_of_years = 10
for ti, mi in n:
    if ti in list(range(365,365*(num_of_years+1),365)):
        print(ti,mi)

希望这会有所帮助!

评论

0赞 Luther Brown 10/20/2022
感谢您的帮助。它非常接近,但由于某种原因,它没有打印出前两次,即 和 .您使用的列表显然打印出了我想索引的时间,所以我不明白出了什么问题。这是输出:3657301095.0 -6391350.0 1460.0 -7159800.0 2190.0 -8591360.0 3285.0 -10955300.0 3650.0 -11810600.0
0赞 Abhi 10/20/2022
你能分享一下你的数组吗?n
0赞 Luther Brown 10/20/2022
这是 13000+ 个数据点。如果您仍然感兴趣,这里有一个谷歌驱动器链接:drive.google.com/file/d/1Z2-Y1oXzMpYBEMMqpplOVtGbvMCIaZUs/...
0赞 Abhi 10/21/2022
它没有显示的原因,代码会检查特定值,例如,但您从 csv 共享的数据没有特定的舍入值,并且在前两个值中具有 - 对于其余值,它没有尾随小数。请参考这张图片 - postimg.cc/WFBScy8r365, 730, 1095....trailing decimals365.27, 730.01
0赞 Luther Brown 10/22/2022
我明白了。这就是我所怀疑的。我猜熊猫和 numpy 无法处理这样的漂浮物。我不知道熊猫这么聪明 - 谢谢你的截图,谢谢你的帮助。:)