python中多维数组中列major的numpy整形

2024-03-29 00:52:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图将一个字符串转换成n维numpy数组(x,4,4)。基本要求是4x4数组,列主要填充值。我们将根据输入字符串的长度使用任意多个4x4数组。例如,如果我的字符串是:

“一只敏捷的棕色狐狸跳过狗”

结果数组应该如下所示:

[[['A' 'i' 'b' 'n']
  [' ' 'c' 'r' ' ']
  ['q' 'k' 'o' 'f']
  ['u' ' ' 'w' 'o']]

 [['x' 'm' 'o' ' ']
  [' ' 'p' 'v' 'd']
  ['j' 's' 'e' 'o']
  ['u' ' ' 'r' 'g']]]

请注意,与传统的行先填充值不同,要求在4x4子数组中先填充列。

我知道实现这一点的常规代码如下所示,其中包含三重嵌套循环:

^{pr2}$

我想利用Python的函数功能,经过一番研究,我找到了以下方法:

string = 'A quick brown fox jumps over dog'
dim1 = len(string) // 16
matrix2 = np.array(list(string))
matrix2 = np.reshape(matrix2, (dim1, 4, 4))

但当我进行整形时,它会给出以下输出:

[[['A' ' ' 'q' 'u']
  ['i' 'c' 'k' ' ']
  ['b' 'r' 'o' 'w']
  ['n' ' ' 'f' 'o']]

 [['x' ' ' 'j' 'u']
  ['m' 'p' ' ' 'o']
  ['v' 'e' 'r' ' ']
  ['d' 'o' 'g' 's']]]

它正在逐行完成字符串。我希望它在sub(4x4)数组中逐列显示,然后转到下一个(4x4)数组。在

进一步的研究表明,我可以使用swapaxes函数来实现这一点,如下所示:

matrix2 = np.swapaxes(matrix2, 1, 2)

上面的结果给了我想要的结果。在

所以,我最后的代码是:

string = 'A quick brown fox jumps over dog'
dim1 = len(string) // 16
matrix2 = np.array(list(string))
matrix2 = np.reshape(matrix2, (dim1, 4, 4))
matrix2 = np.swapaxes(matrix2, 1, 2)
print(matrix2)

只是想知道你的专家意见,如果有一种方法来实现重塑和交换使用单一的方法/功能。或者,如果有一种完全更好、更方便的方法,而不使用循环或不使用那么多函数。在


Tags: 方法函数字符串代码功能stringnp数组
1条回答
网友
1楼 · 发布于 2024-03-29 00:52:37

不是单一的方法/函数,但您可以在一行代码中执行此操作:

matrix2 = np.array(list(string)).reshape(dim1,4,4).swapaxes(1,2)

它给出了:

^{pr2}$

相关问题 更多 >