python - 在满足峰值的地方分割数组

标签 python arrays numpy

希望一切顺利。 我有一个非常大的 numpy 数组,想将其分成几个。我的数组有三列,我想在所有列都达到最大值的地方将其拆分:

array = [[0, 0, 0],
         [0, 0, 5],
         [10, 5, 10],
         [1, 1, 1],
         [5, 5, 15],
         [10, 8, 20],
         [2, 0, 0],
         [10, 10, 12],
         [1, 2, 0],
         [2, 5, 9]]

现在,我想将其分成四个数组:

sub_array_1=[[0, 0, 0],
         [0, 0, 5],
         [10, 5, 10]]
sub_array_2=[[1, 1, 1],
         [5, 5, 15],
         [10, 8, 20]]
sub_array_3=[[2, 0, 0],
         [10, 10, 12]]
sub_array_4=[[1, 2, 0],
         [2, 5, 9]]

我尝试在一个 for 循环中使用 if 语句,表示当输入的每个元素都大于存储在上行和下行中的元素时,给我一个数组。我还应该弄清楚最后一行:

import numpy as np    
sub_array_1=np.array([])
    for i in array:
        if array[i,:]>array[i+1,:] and array[i,:]>array[i+1,:]:
            vert_1=np.append(sub_array_1,array[0:i,:])

我的代码不起作用,但它只是显示了我的想法。 我对 Python 很陌生,我找不到将我的想法编写为代码的方法。因此,我感谢任何帮助和贡献。 干杯, 阿里

最佳答案

IIUC,将 numpy.diffnumpy.array_split 结合使用的一种方法:

indices = np.argwhere(np.all(np.diff(array, axis=0) < 0, axis=1))
np.array_split(array, indices.ravel()+1, axis=0)

输出:

[array([[ 0,  0,  0],
        [ 0,  0,  5],
        [10,  5, 10]]),
 array([[ 1,  1,  1],
        [ 5,  5, 15],
        [10,  8, 20]]),
 array([[ 2,  0,  0],
        [10, 10, 12]]),
 array([[1, 2, 0],
        [2, 5, 9]])]
  • np.allnp.diff 查找一行,该行的所有元素与下一行(即峰值结束的位置)均为负差<
  • np.array_split 然后将根据找到的峰值位置分割给定的数组。

关于python - 在满足峰值的地方分割数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63941274/

相关文章:

python - 为存在的元素绘制两个向量 - 即跳过没有条目的行

c - 递增指向字符串数组的指针返回 NULL

.net - 在 vb.net 中对字符串数组进行洗牌

python - 如何加速 Numpy 数组过滤/选择?

python - 将一个数组中的唯一值映射到另一个数组的相应总和

python - FastCGI 在 stderr : "Primary script unknown" - nginx and silex 中发送

python - logging.StreamHandler 中出现 UnicodeEncodeError

python - 结合 bool Pandas 数据帧的规范方法

python - ndb 模型应用引擎的模型表单(django 表单不适合我)

c++ - 将 txt.-file 中不同行上的数字读取到 C++ 中的数组