gpt4 book ai didi

python - 将现有 Numpy ndarray 的值转换为元组

转载 作者:太空宇宙 更新时间:2023-11-04 08:38:45 25 4
gpt4 key购买 nike

假设我有一个 numpy.ndarrayshape (2,3,2) 如下,

arr = np.array([[[1,3], [2,5], [1,2]],[[3,3], [6,5], [5,2 ]]])

我想以这样的方式 reshape 它:

arr.shape == (2,3)
arr == [[(1,3), (2,5), (1,2)],[(3,3), (6,5), (5,2)]]

arr 的每个值都是一个大小为 2 的 tuple

我想这样做的原因是我想沿 3 维数组的轴 0 取最小值,但我想保留与行的最小值配对的值。

arr = np.array(
[[[1, 4],
[2, 1],
[5, 2]],

[[3, 3],
[6, 5],
[1, 7]]])

print(np.min(arr, axis=0))
>>> [[1,3],
[2,1],
[1,2]]
>>>Should be
[[1,4],
[2,1],
[1,7]]

如果数组包含元组,它将是二维的,并且最小化的比较运算符仍然可以正常运行,所以我会得到正确的结果。但是除了遍历数组之外我还没有找到任何方法来做到这一点,这是低效的并且在实现中很明显。

是否可以在 numpy 中高效地执行此转换?

最佳答案

根本不要使用元组 - 只需将其视为结构化数组,它支持您所追求的词法比较:

a = np.array([[[1,3], [2,5], [1,2]],[[3,3], [6,5], [5,2]]])

a_pairs = a.view([('f0', a.dtype), ('f1', a.dtype)]).squeeze(axis=-1)
min_pair = np.partition(a_pairs, 0, axis=0)[0] # min doesn't work on structured types :(
array([(1, 4), (2, 1), (1, 7)], 
dtype=[('f0', '<i4'), ('f1', '<i4')])

关于python - 将现有 Numpy ndarray 的值转换为元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46510646/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com