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的新手,我找不到将我的想法编写为代码的方法。因此,感谢您的帮助和贡献。 干杯, 阿里
答案 0 :(得分:2)
IIUC,将numpy.diff
与numpy.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.all
和np.diff
找到一行,其中该行的所有元素与下一行(即峰结束处)负差np.array_split
然后将根据找到的峰的位置拆分给定的阵列。