gpt4 book ai didi

python - 使用嵌套结构按列连接 NumPy 数组

转载 作者:行者123 更新时间:2023-12-04 17:58:55 29 4
gpt4 key购买 nike

我有以下 3 个 NumPy 数组:

arr1 = np.array(['a', 'b', 'c', 'd', 'e', 'f']).reshape(2, 3)
arr2 = np.array(['g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p']).reshape(2, 5)
arr3 = np.array(['r', 's', 't', 'u']).reshape(2, 2)

我想按列加入它们,但让它们保持来自每个数组的项目之间的分离,如下所示:
Output:
array([[['a', 'b', 'c'], ['g', 'h', 'i', 'j', 'k'], ['r', 's']],
[['d', 'e', 'f'], ['l', 'm', 'n', 'o', 'p'], ['t', 'u']]], dtype='<U1')

但是,我找不到可以为我实现的 NumPy 函数。我得到的最接近的只是一个普通的 np.concatenate(),但输出没有保留我想要的分离:
Input: np.concatenate([arr1, arr2, arr3], axis = 1)
Output:
array([['a', 'b', 'c', 'g', 'h', 'i', 'j', 'k', 'r', 's'],
['d', 'e', 'f', 'l', 'm', 'n', 'o', 'p', 't', 'u']], dtype='<U1')

关于如何达到预期效果的任何建议?

更新:
谢谢你的一些很棒的答案。作为额外的难度,我还希望解决方案能够考虑可能可变数量的输入数组,这些数组仍将共享相同数量的行。因此,有时会有 3 个,其他时候例如6 等

最佳答案

你可以试试:

print(np.array([[x, y, z] for x, y, z in zip(arr1.tolist(), arr2.tolist(), arr3.tolist())]))

或者,如果您也希望将内部行作为数组:
print(np.array([np.array([x, y, z]) for x, y, z in zip(arr1.tolist(), arr2.tolist(), arr3.tolist())]))

输出:
[[['a', 'b', 'c'] ['g', 'h', 'i', 'j', 'k'] ['r', 's']]
[['d', 'e', 'f'] ['l', 'm', 'n', 'o', 'p'] ['t', 'u']]]

形状是 (2, 3)正如预期的那样。

编辑:

正如您在评论中提到的,请尝试:
l = [arr1, arr2, arr3] # list of the arrays:
print(np.array([np.array([x, y, z]) for x, y, z in zip(*[i.tolist() for i in l])]))

关于python - 使用嵌套结构按列连接 NumPy 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59853065/

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