Python,按数据集的梯度分割数组

标签 python list numpy

对于任何类型的编程,我都是新手。

我有一组 x 和 y 值。

x = [1.3, 2.1, 3.5, 4.0, 3.9, 3.1, 2.7, 1.5, 1.7, 2.0, 3.6, 4.2]
y = [1.0, 1.4, 2.0, 2.2, 2.7, 3.1, 3.3, 3.9, 4.3, 4.4, 5.0, 5.5]

我想在每次 x 的梯度改变符号时将它们分开。我的第一个想法是这样的

import numpy as np

x_grad = np.gradient(x)
array = np.column_stack((x, y, x_grad))

pos = (x_grad >= 0)
neg = (x_grad < 0)
x_y_pos = np.column_stack((x, y, pos))
x_y_neg = np.column_stack((x, y, neg))
x_y_pos_new = x_y_pos[x_y_pos.all(1)]
x_y_neg_new = x_y_neg[x_y_neg.all(1)]

但这只是给了我两个数组,一个当 x 具有正梯度时,另一个当 x 具有负梯度时。这不好,因为我也需要将第一部分和最后部分分开。

我正在尝试想出某种循环,但我不知道该怎么做,这是我无用的尝试

array_1=[]

for i in xrange(0, len(array)):
    while True: 
        array[:,2][i] >= 0
        array_1.append(array)
        break

这只是给了我完整数组的 12 次(即数组的长度)。我希望当第三列不再是积极的时候它就会停止。即使它达到了我想要的效果,我仍然只收到了第一部分。

附注:我无法手动拆分它。这只是我拥有的许多大型数据文件中发生的情况的简化示例,因此梯度变化发生在不同的地方。我需要这样做来实现我想要处理数据的目的。

任何想法将不胜感激,我快把自己逼疯了。

最佳答案

如果我明白你想要什么,你可以先使用 How to detect a sign change for elements in a numpy array 中的换号算法 构建符号更改位置数组:

import numpy as np

x = [1.3, 2.1, 3.5, 4.0, 3.9, 3.1, 2.7, 1.5, 1.7, 2.0, 3.6, 4.2]
y = [1.0, 1.4, 2.0, 2.2, 2.7, 3.1, 3.3, 3.9, 4.3, 4.4, 5.0, 5.5]
gradx = np.gradient(x)
asign = np.sign(gradx)
signchange = ((np.roll(asign, 1) - asign) != 0).astype(int)

然后就可以从 How do I get a list of indices of non zero elements in a list? 获取符号变化的元素位置

splitloc = [i for i, e in enumerate(signchange) if e != 0]

然后您可以简单地使用 numpy.split 拆分数组

np.split(x,splitloc)

关于Python,按数据集的梯度分割数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29171435/

相关文章:

python - 将 vispy 与 pyqt5 和 uic 集成

python - 你能在不加载整个图像的情况下循环遍历图像中的像素吗?

python - 绘制 3D 强度数据的立方体

list - 将三个列表组合成 Haskell 中的三元组列表

python - 结合numpy多维数组

python - pyshark - 来自 TCP 数据包的数据

java - 如何将 List<String> 与 String 进行比较?

mysql - 在 SQL 中的单元格内插入列表的最佳方法是什么?

python - 优化 numpy 网格创建以实现高效插值

python - 有没有更好的方法来删除长度等于或高于阈值的连续零部分?