如何在Numpy中根据向量重排规则调整二维矩阵轴顺序
实现方法
你可以通过两种方式完成矩阵同步重排,均能匹配需求:
通用重排方法(适用于任意ts重排逻辑)
只要你得到了重排后的tss,只需要生成新序列对应原序列的列索引,再用numpy高级索引重排矩阵的列即可,示例代码如下:
import numpy as np a = np.array([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]) ts = np.array([100, 200, 300]) tss = np.array([200, 300, 100]) # 生成新时间序列对应原序列的列索引 col_idx = [np.where(ts == t)[0][0] for t in tss] # 若原ts是有序数组,可以用向量化写法提升效率:col_idx = np.searchsorted(ts, tss) # 按索引重排矩阵的列 aa = a[:, col_idx] print(aa) # 输出结果: # [[2 3 1] # [5 6 4] # [8 9 7]]
FFT场景专用方法
如果你确定重排逻辑就是np.fft.fftshift对应的顺序,可以直接调用numpy的fftshift方法指定操作列轴,代码更简洁:
aa = np.fft.fftshift(a, axes=1)
输出结果和通用方法完全一致。
相关知识点
- numpy高级索引:整数数组索引可以沿指定轴重排元素,二维数组中
arr[:, 索引列表]会按照索引列表的顺序重排所有行的列元素,不会改变行顺序 - numpy轴规则:二维数组
axis=0对应行维度,axis=1对应列维度,指定轴操作可以只修改目标维度的顺序,不影响其他维度的结构 - FFT配套操作:
np.fft.fftfreq用于生成FFT计算对应的频率坐标,np.fft.fftshift用于将FFT输出的零频分量移动到数组中心,通过axes参数可以指定仅对列维度生效,匹配时间轴重排的需求。
内容的提问来源于stack exchange,提问作者velenos14
相关产品推荐
相关产品推荐

