【问题标题】:How to reorder 2D matrix axes based on reordering of a vector in numpy如何根据 numpy 中向量的重新排序来重新排序 2D 矩阵轴
【发布时间】:2021-12-23 21:41:48
【问题描述】:

我有一个2D ndarray,形状为(n_x, n_t)

二维矩阵沿其行(水平方向,每行)存储一个数量Q,因此是t 函数的离散版本,用于固定x。 在其列中,因此对于固定的t,(即在固定列下),2D 矩阵为不同的x 保存该数量的Q 值,所以我有一个离散版本的Q(x)

我将把这个矩阵绘制为二维热图。

我有一个矢量形状的(n_t, ),其中包含二维矩阵存储数量Q 的值的时间,对于任何给定的 x 值。因此,对于每一行,跨列,二维矩阵中这些值的时间是相同的。

视觉上,对于n_x=3n_t=3

[
[Q_{11}, Q_{12}, Q_{13}],
[Q_{21}, Q_{22}, Q_{23}],
[Q_{31}, Q_{32}, Q_{33}]
]

[Q11, Q12, Q13] 行基本上是Q(x_1, ts)[Q21, Q22, Q23] 行基本上是Q(x_2, ts),最后一行也是如此。

我有ts 为:[t1, t2, t3]

问题

我将ts(无论出于何种原因)重新排序为[t2, t3, t1]

我想将矩阵重新排序为:

[
[Q_{12}, Q_{13}, Q_{11}], 
[Q_{22}, Q_{23}, Q_{21}], 
[Q_{31}, Q_{33}, Q_{32}]
]

我该怎么做?我要读什么? ts向量的重新排序来自:np.fft.fftshift(np.fft.fftreq(ts))

谢谢!

从 cmets 编辑:

a = np.array([
            [1, 2, 3], 
            [4, 5, 6], 
            [7, 8, 9]
            ])

ts = np.array([100, 200, 300])

tss = np.array([200, 300, 100])

aa = np.array([
            [2, 3, 1], 
            [5, 6, 4], 
            [8, 9, 7]
            ])

【问题讨论】:

  • 很好的解释!你能添加一个(玩具)输入和预期的输出吗?
  • @DaniMesejo,谢谢。您的意思是在 Q_{ab} 中实际抛出一些浮点数,以便您可以应用您编写的代码并查看结果?我目前没有输入输出示例,因为我不知道如何根据 ts 重新排序来重新排序矩阵
  • 是的。没错
  • @DaniMesejo,查看编辑后的问题,请告诉我这是否是您要查找的内容
  • 所以aa = a[:, [1,2,0]

标签: python arrays numpy matrix data-science


【解决方案1】:

用途:

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])


# number of rows n_x in the original question
n_x = a.shape[0]

# find the original positions
indices = (ts == tss[:, None]).argmax(1)

res = np.take_along_axis(a, np.tile(indices, (n_x, 1)), axis=1)
print(res)

输出

[[2 3 1]
 [5 6 4]
 [8 9 7]]

【讨论】:

    猜你喜欢
    • 2011-02-16
    • 2021-02-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2012-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多