Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在满足峰值的位置拆分数组_Python_Arrays_Numpy - Fatal编程技术网

Python 在满足峰值的位置拆分数组

Python 在满足峰值的位置拆分数组,python,arrays,numpy,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],

希望你做得好。 我有一个非常大的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非常陌生,我找不到将我的想法写成代码的方法。因此,我感谢任何帮助和贡献。 干杯
Ali

IIUC,单向使用
numpy.diff
numpy.array\u split

indices = np.argwhere(np.all(np.diff(array, axis=0) < 0, axis=1))
np.array_split(array, indices.ravel()+1, axis=0)
  • np.all
    np.diff
    查找一行,其中该行的所有元素与下一行存在负差异(即峰值结束处)
  • np.array\u split
    将根据找到的峰值位置拆分给定的数组

亲爱的@Chris,您的解决方案非常出色且高效。还有一个问题:如何从这个结果列表中提取数组?有没有办法以我想要的方式保存它们,就像四个独立的数组一样。再次感谢您的支持help@Ali_d最好的方法是创建一个
dict
{“sub_数组%s”%n:v代表n,v在枚举(new_数组,1)}
其中
new_数组
是包含拆分数组的列表;)。谢谢你的帮助。你的提示真的很有效。我试图从每个字典中导出sub_数组,但无法处理它。事实上,我想保存每个键(sub_数组)及其值(numpy数组)。我尝试了一个for循环,但没有成功。在某些情况下,我有几十个子数组,手动导出它们非常耗时。我想找到一种方法,将每个sub_数组及其相关数据保持为一个单独的数组。
[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]])]