如何将任意长度一维numpy数组的左侧内容镜像到右侧
你可以通过统一的切片逻辑省略奇偶分支判断,实现更简洁的实现:
核心思路是:无论数组长度是奇数还是偶数,都先取包含中点(奇数长度)的左半段,反转后截取与右半段长度一致的尾部赋值给右半段即可。
实现代码
import numpy as np def mirror_left(arr, modify_original=False): """ 将一维numpy数组左半部分镜像到右半部分 :param arr: 输入一维numpy数组 :param modify_original: 是否修改原数组,默认False返回新数组 """ res = arr if modify_original else arr.copy() n = res.size mid = (n + 1) // 2 res[mid:] = np.flip(res[:mid])[-(n - mid):] return res
测试验证
a = np.array([1, 2, 3, 4, 5]) b = np.array([1, 2, 3, 4]) c = np.array([1, 2, 3, 4, 5, 6]) print(mirror_left(a)) # 输出 [1 2 3 2 1] print(mirror_left(b)) # 输出 [1 2 2 1] print(mirror_left(c)) # 输出 [1 2 3 3 2 1]
如果需要兼容普通Python列表,也可以用原生语法实现,不需要依赖numpy:
def mirror_left_list(lst): n = len(lst) mid = (n + 1) // 2 return lst[:mid] + lst[:mid][::-1][-(n - mid):]
内容的提问来源于stack exchange,提问作者Alexander
相关产品推荐
相关产品推荐

