比方说,我有一个(x,y)点的数组,其结构如下:
arr = np.array([([1. ], [2. ]),
([1., 93.], [5., 46.]),
([4. ], [3. ])],
dtype=[('x','O'), ('y', 'O')])
也就是说,这些点被分组成这样的最里面的数组。最里面数组的大小可能是任意的,但对于x和y总是相同的
我想做两件事:
a)通过连接最里面的数组的内容来扩展它们,因此对于上面的示例,结果如下所示:
np.array([( 1., 2.),
( 1., 5.),
(93., 46.),
( 4., 3.)],
dtype=[('x','f8'), ('y','f8')])
b)对于每个(最外层)条目,选择y最大的元素:
np.array([( 1., 2.),
(93., 46.),
( 4., 3.)],
dtype=[('x','f8'), ('y','f8')])
我相信应该有一种方法可以有效地做到这一点,而不必使用丑陋的for循环。如果有任何帮助,我将不胜感激。你知道吗
UPD(a和b使用丑陋的循环):
(arr是post开头定义的数组)
(一)
np.array([(x_, y_) for x, y in arr for x_, y_ in zip(x, y)], dtype=[('x','f8'), ('y','f8')])
(二)
np.array([(x[np.argmax(np.array(y))], y[np.argmax(np.array(y))]) for x, y in arr],dtype=[('x','f8'), ('y','f8')])
问题还在于,实际上我不仅有两个字段(x和y),还有77个不同类型的字段(float、integers、booleans)。。。所以这些表达式将增长到许多行。你知道吗
使用Pandas,可以将数据存储在平面数据框中,使用
group
值指示数据来自原始数组的哪一行:那么第一个操作仅仅是
x
和y
列的一部分:第二个操作可以使用
groupby/idxmax
:给定结构化NumPy数组
arr
,您将不得不循环执行 列表至少列出一次以执行这些操作。因此,您不妨花一次钱将数据组织到一个更好的数据结构中,例如Pandas DataFrame。你知道吗有一种方法可以将
arr
转换为df
:收益率
相关问题 更多 >
编程相关推荐