gpt4 book ai didi

python - 交错 numpy 矩阵的行,生成排列方案

转载 作者:行者123 更新时间:2023-11-28 21:34:56 28 4
gpt4 key购买 nike

我有一个矩阵,我想根据下面描述的以下方案按行进行洗牌:

我们有矩阵a:

import numpy as np
np.random.seed(0)
low = -5
high = 5

num_frames = 2
other_value = 3
dim1 = num_frames * other_value
dim2 = 5
a_shape = (dim1, dim2)
a = np.random.random_integers(low, high, size=a_shape)
print(a)

[[ 0 -5 -2 -2 2]
[ 4 -2 0 -3 -1]
[ 2 1 3 3 5]
[-4 1 2 2 3]
[-4 0 4 3 4]
[-1 -2 -5 -2 0]]

我们希望将行分成 num_frames 组。因此,对于我们的矩阵 a,有 2 个帧,我们的分割将如下所示:

[[ 0 -5 -2 -2  2]
[ 4 -2 0 -3 -1]
[ 2 1 3 3 5]

[-4 1 2 2 3]
[-4 0 4 3 4]
[-1 -2 -5 -2 0]]

然后,我们想要交错每个帧的行,因此排列将以 [0, 3, 1, 4, 2, 5] 形式给出,其中这些数字是行索引。

对于a,这将为我们提供一个如下所示的矩阵:

[[ 0 -5 -2 -2  2]
[-4 1 2 2 3]
[ 4 -2 0 -3 -1]
[-4 0 4 3 4]
[ 2 1 3 3 5]
[-1 -2 -5 -2 0]]

如果我们有 3 个帧,但行数相同(因此 other_value=2),我们的排列将为 [0, 2, 4, 1, 3, 5],给出一个矩阵:

 [[ 0 -5 -2 -2  2]
[ 2 1 3 3 5]
[-4 0 4 3 4]
[ 4 -2 0 -3 -1]
[-4 1 2 2 3]
[-1 -2 -5 -2 0]]

我不太明白的是:

什么样的方法可以为任意大小的矩阵和帧数生成正确的排列?假设每个帧中的行数始终相同(或者,dim1 % num_frames = 0)。

排列行的一种方法是下面的代码,但我不确定如何获得排列。

b = a.copy()
perm = [0, 3, 1, 4, 2, 5]
b[[0, 1, 2, 3, 4, 5]] = a[perm]
print(b)

最佳答案

这是一个使用 np.reshapenp.transpose 执行您想要的操作的函数:

def interleave_frames(a, num_frames):
if len(a) % num_frames != 0: raise ValueError
frame_size = len(a) // num_frames
out = np.reshape(a, (num_frames, frame_size, -1))
out = np.transpose(out, (1, 0, 2))
return np.reshape(out, (len(a), -1))

测试:

import numpy as np

np.random.seed(0)
low = -5
high = 5
num_frames = 2
other_value = 3
dim1 = num_frames * other_value
dim2 = 5
a_shape = (dim1, dim2)
a = np.random.random_integers(low, high, size=a_shape)
print('Array:')
print(a)
print('Interleaved:')
print(interleave_frames(a, num_frames))

输出:

Array:
[[ 0 -5 -2 -2 2]
[ 4 -2 0 -3 -1]
[ 2 1 3 3 5]
[-4 1 2 2 3]
[-4 0 4 3 4]
[-1 -2 -5 -2 0]]
Interleaved:
[[ 0 -5 -2 -2 2]
[-4 1 2 2 3]
[ 4 -2 0 -3 -1]
[-4 0 4 3 4]
[ 2 1 3 3 5]
[-1 -2 -5 -2 0]]

编辑:

如果您确实想获取索引,则可以使用相同的方法( reshape /转置/ reshape ):

print(np.arange(len(a)).reshape((num_frames, -1)).transpose().reshape(-1))
# [0 3 1 4 2 5]

关于python - 交错 numpy 矩阵的行,生成排列方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52896918/

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