我有一个表格数组:
[[ 1. , 2., 3., 1., 3., 3., 4. ],
[ 1.3, 2.3, 3.3, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.2, 3.2, 2., 3.2, 3.2, 4.2 ],
[ 1.1, 2.1, 1., 1., 3., 3., 4. ],
[ 1.3, 2.3, 3.5, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.7, 3.2, 2., 3.2, 3.2, 4.2 ],
[ 1.3, 2.2, 1., 1., 3., 3., 4. ],
[ 1.3, 2.3, 3.6, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.8, 3.2, 2., 3.2, 3.2, 4.2 ],
[ 1.4, 2.3, 1., 1., 3., 3., 4. ],
[ 1.3, 2.3, 3.7, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.9, 3.2, 2., 3.2, 3.2, 4.2 ],
[ 1.5, 2.1, 1., 1., 3., 3., 4. ],
[ 1.89, 2.3, 3.5, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.7, 3.2, 2., 3.2, 3.231, 4.2 ],
[ 1.9, 2.2, 1., 1., 3., 3., 4. ],
[ 1.3, 2.22, 3.6, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.8, 3.2, 2., 3.66, 3.2, 4.2 ],
[ 1.89, 2.3, 1., 1., 3., 3., 4. ],
[ 1.3, 2.99, 3.7, 3., 3.3, 3.3, 4.3 ],
[ 1.2, 2.9, 3.2, 2., 3.34, 3.2, 4.2 ]]
我想基于第四个列将此数组拆分为多个子数组。即我想要一个第四列等于1的子阵列,另一个第四列等于2的子阵列等等。我事先并不知道第四列中的所有可能值是什么。
例如,对应于第四列的子阵列为1:
[[ 1. 2. 3. 1. 3. 3. 4. ],
[ 1.1 2.1 1. 1. 3. 3. 4. ],
[ 1.3 2.2 1. 1. 3. 3. 4. ],
[ 1.4 2.3 1. 1. 3. 3. 4. ],
[ 1.5 2.1 1. 1. 3. 3. 4. ],
[ 1.9 2.2 1. 1. 3. 3. 4. ],
[ 1.89 2.3 1. 1. 3. 3. 4. ]]
答案 0 :(得分:2)
制作数组列表:
y = [x[x[:,3]==k] for k in np.unique(x[:,3])]
答案 1 :(得分:1)
您可以使用O(NlogN)
,numpy.argsort
,numpy.array_split
和numpy.diff
在numpy.where
时间内执行此操作:
>>> indices = np.argsort(arr[:, 3])
>>> arr_temp = arr[indices]
>>> np.array_split(arr_temp, np.where(np.diff(arr_temp[:,3])!=0)[0]+1)
[array([[ 1. , 2. , 3. , 1. , 3. , 3. , 4. ],
[ 1.89, 2.3 , 1. , 1. , 3. , 3. , 4. ],
[ 1.1 , 2.1 , 1. , 1. , 3. , 3. , 4. ],
[ 1.9 , 2.2 , 1. , 1. , 3. , 3. , 4. ],
[ 1.3 , 2.2 , 1. , 1. , 3. , 3. , 4. ],
[ 1.5 , 2.1 , 1. , 1. , 3. , 3. , 4. ],
[ 1.4 , 2.3 , 1. , 1. , 3. , 3. , 4. ]]), array([[ 1.2 , 2.8 , 3.2 , 2. , 3.66 , 3.2 , 4.2 ],
[ 1.2 , 2.7 , 3.2 , 2. , 3.2 , 3.231, 4.2 ],
[ 1.2 , 2.9 , 3.2 , 2. , 3.2 , 3.2 , 4.2 ],
[ 1.2 , 2.9 , 3.2 , 2. , 3.34 , 3.2 , 4.2 ],
[ 1.2 , 2.8 , 3.2 , 2. , 3.2 , 3.2 , 4.2 ],
[ 1.2 , 2.7 , 3.2 , 2. , 3.2 , 3.2 , 4.2 ],
[ 1.2 , 2.2 , 3.2 , 2. , 3.2 , 3.2 , 4.2 ]]), array([[ 1.3 , 2.3 , 3.6 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.89, 2.3 , 3.5 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.3 , 2.3 , 3.5 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.3 , 2.22, 3.6 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.3 , 2.3 , 3.3 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.3 , 2.99, 3.7 , 3. , 3.3 , 3.3 , 4.3 ],
[ 1.3 , 2.3 , 3.7 , 3. , 3.3 , 3.3 , 4.3 ]])]
答案 2 :(得分:-2)
查看docs以将数组拆分为多个子数组。
numpy.hsplit(ary,indices_or_sections)
将数组水平(按列)拆分为多个子数组。
所以说你有一个4x4阵列A:
array([[ 0., 1., 2., 3.],
[ 4., 5., 6., 7.],
[ 8., 9., 10., 11.],
[ 12., 13., 14., 15.]])
split = numpy.hsplit(A,4) =
[array([[ 0.],
[ 4.],
[ 8.],
[ 12.]]), array([[ 1.],
[ 5.],
[ 9.],
[ 13.]]), array([[ 2.],
[ 6.],
[ 10.],
[ 14.]]), array([[ 3.],
[ 7.],
[ 11.],
[ 15.]])]