我需要根据第3列中Numpy数组的值拆分3D numpy数组。因此,假设第三列的值为0,1和2,那么我需要3个2d numpy数组,其中一个的值为0,其他的为1,依此类推。
我尝试过numpy.where
,但没有成功。
这是我的数据示例:
(165, 69, 3)
(165, 70, 3)
(165, 71, 3)
(165, 72, 3)
(211, 416, 4)
(211, 417, 4)
(211, 418, 4)
(211, 419, 4)
(211, 420, 4)
(211, 421, 4)
(211, 422, 4)
所以在这种情况下,我需要两个数组,一个数组的值为3,另一个数组的值为4。
答案 0 :(得分:3)
对于一般解决方案,您可以np.unique
与return_index=True
一起使用,然后使用np.split
,如下所示:
import numpy as np
a = np.array(
[(165, 69, 3),
(165, 70, 3),
(165, 71, 3),
(165, 72, 3),
(211, 416, 4),
(211, 417, 4),
(211, 418, 4),
(211, 419, 4),
(211, 420, 4),
(211, 421, 4),
(211, 422, 4)])
a = a[a[:, 2].argsort()]
third_col = a[:, 2]
_, indices = np.unique(third_col, return_index=True)
result = np.split(a, indices)[1:]
print(result)
输出:
[array([[165, 69, 3],
[165, 70, 3],
[165, 71, 3],
[165, 72, 3]]),
array([[211, 416, 4],
[211, 417, 4],
[211, 418, 4],
[211, 419, 4],
[211, 420, 4],
[211, 421, 4],
[211, 422, 4]])]
答案 1 :(得分:-1)
让d为您的数组:
d[numpy.where(d[:,-1]==3)]
给出最后一行为3的所有行。
答案 2 :(得分:-1)
这就是您想要的:
import numpy as np
arr = np.array([[165, 69, 3], [165, 70, 3], [165, 71, 3], [165, 72, 3], [211, 416, 4], [
211, 417, 4], [211, 418, 4], [211, 419, 4], [211, 420, 4], [211, 421, 4], [211, 422, 4]])
arr1 = arr[np.where(arr[:,2] == 3)]
arr2 = arr[np.where(arr[:,2] == 4)]
print(arr1)
print(arr2)