如何提取Numpy数组奇偶索引元素并垂直并排合并
Numpy提取奇偶索引行并合并的解决方案
问题纠正
你转置数组后用mat[1::2]提取的是原数组的奇数索引列,而非预期的奇数索引行——因为转置会交换数组的行和列,导致索引指向的维度变了。要提取原数组的奇数索引行(索引1、3),直接操作原数组即可:
import numpy as np mat = np.array([[1, 1, 0, 0, 0], [0, 1, 0, 0, 1], [1, 0, 0, 1, 1], [0, 0, 0, 0, 0], [1, 0, 1, 0, 1]]) # 提取奇数索引行(索引1、3) odd_rows = mat[1::2] # 提取偶数索引行(索引0、2、4) even_rows = mat[::2]
此时odd_rows就是你期望的结果:
array([[0, 1, 0, 0, 1], [0, 0, 0, 0, 0]])
生成最终输出
要得到目标数组,只需将提取的奇偶行分别转置(行转列),再水平合并:
# 转置奇偶行,将行转为列 odd_cols = odd_rows.T even_cols = even_rows.T # 水平合并两个数组 result = np.hstack((odd_cols, even_cols))
最终输出结果:
array([[0, 0, 1, 1, 1], [1, 0, 1, 0, 0], [0, 0, 0, 0, 1], [0, 0, 0, 1, 0], [1, 0, 0, 1, 1]])
步骤说明
mat[1::2]:从索引1开始,步长为2,提取原数组第1、3行(奇数索引行)。mat[::2]:从索引0开始,步长为2,提取原数组第0、2、4行(偶数索引行)。.T:转置数组,将行维度转换为列维度,让原本的2行5列、3行5列数组变为5行2列、5行3列。np.hstack():水平拼接两个数组,得到5行5列的目标数组。
内容的提问来源于stack exchange,提问作者Learning noob
相关产品推荐
相关产品推荐

