【问题标题】:Find rows where values change in array查找数组中值发生变化的行
【发布时间】:2020-06-05 22:27:42
【问题描述】:

如何找到我的数组的行(索引),它的值在哪里发生变化?

例如我有一个数组:

0 -0.638127 0.805294    1.30671
1 -0.638127 0.805294    1.30671
2 -0.085362 0.523378    0.550509
3 -0.085362 0.523378    0.550509
4 -0.323397 0.94502     0.49001
5 -0.323397 0.94502     0.49001
6 -0.323397 0.94502     0.49001
7 -0.291798 0.421398    0.962115

我想要这样的结果:

[0 2 4 7]

我很乐意使用现有的库,而且我不限于任何东西。我想要的只是行数。我该如何计算?

我试过了

a = []
for i, row in enumerate(vecarray):
    if i > 0:
        a[i] = vecarray[i] - vecarray[i-1]
        b = np.where(a != 0)

但这给了我IndexError: list assignment index out of range

【问题讨论】:

  • 数组?为什么它有索引?你的意思是熊猫数据框?
  • np.nonzero(arr[1:] - arr[:-1] != 0)
  • 您是否尝试编写一个循环,将当前行与前一行进行比较,如果值不同,则将当前索引添加到结果列表中?
  • @mkrieger1 不,那段代码是什么样子的?
  • 我不知道如何处理上一行。如果我写 ' for row in array:' 我如何处理前一行?

标签: python


【解决方案1】:
arr = [
(-0.638127, 0.805294, 1.30671),
(-0.638127, 0.805294, 1.30671),
(-0.085362, 0.523378, 0.550509),
(-0.085362, 0.523378, 0.550509),
(-0.323397, 0.94502,  0.49001),
(-0.323397, 0.94502,  0.49001),
(-0.323397, 0.94502,  0.49001),
(-0.291798, 0.421398, 0.962115)
]

i = 0
prev_t = None
for t in arr:
    if t != prev_t:
        prev_t = t
        print(i)
    i += 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-12
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多