test = [(0,1,2),(9,0,1),(0,1,3),(0,1,8)]
test=np.array(test)
test = np.array_split(test, 4)
t_0 = test[:0]
t_1 = test[0]
new_test= t_0+test[1:]
print(new_test)
它给了我以下答案:[array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]
如果我从测试中选择第一组,我的目标是[(9,0,1),(0,1,3),(0,1,8)]
。
答案 0 :(得分:1)
您正在混合列表和数组。注意每个阶段的收获:
从元组列表开始:
In [126]: test = [(0,1,2),(9,0,1),(0,1,3),(0,1,8)]
制作二维数组:
In [127]: arr = np.array(test)
In [128]: arr
Out[128]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 3],
[0, 1, 8]])
分成一个列表-每个元素一个“行”,但每个元素都是一个2d数组。问题,分割数将始终是这个大小吗?
In [129]: alist = np.array_split(arr, arr.shape[0])
In [130]: alist
Out[130]:
[array([[0, 1, 2]]),
array([[9, 0, 1]]),
array([[0, 1, 3]]),
array([[0, 1, 8]])]
子列表:
In [131]: alist[:0]
Out[131]: []
In [132]: alist[1:]
Out[132]: [array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]
列表加入:
In [133]: alist[:0] + alist[1:]
Out[133]: [array([[9, 0, 1]]), array([[0, 1, 3]]), array([[0, 1, 8]])]
看起来像您想要的是元组列表,就像您开始时那样:
In [134]: test[:0] + test[1:]
Out[134]: [(9, 0, 1), (0, 1, 3), (0, 1, 8)]
您可以通过将concatenate
应用于连接的数组列表来重新创建二维数组:
In [135]: np.concatenate(alist[:0] + alist[1:])
Out[135]:
array([[9, 0, 1],
[0, 1, 3],
[0, 1, 8]])
In [136]: np.concatenate(alist[:1] + alist[2:])
Out[136]:
array([[0, 1, 2],
[0, 1, 3],
[0, 1, 8]])
In [137]: np.concatenate(alist[:2] + alist[3:])
Out[137]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 8]])
但是请注意,您可以通过索引轻松获得这些数组中的任何一个:
In [138]: arr[[0,1,3],:]
Out[138]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 8]])
借助r_
帮助器,您可以从范围构建索引:
In [139]: np.r_[:2, 3:4]
Out[139]: array([0, 1, 3])
In [140]: arr[np.r_[:2, 3:4],:]
Out[140]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 8]])
您也可以在建立索引后进行联接:
In [141]: np.concatenate([arr[:2,:], arr[3:,:]], axis=0)
Out[141]:
array([[0, 1, 2],
[9, 0, 1],
[0, 1, 8]])
+
用于为列表定义一个联接运算符。对于数组,它是加法。 concatenate
(以及各种stack
变体)是数组连接函数。