让a
成为python中的列表。
a = [1,2,3]
当矩阵转置应用于a
时,我们得到:
np.matrix(a).transpose()
matrix([[1],
[2],
[3]])
我希望概括这个功能,接下来将通过示例帮助说明我要做的事情。让b
成为另一个列表。
b = [[1, 2], [2, 3], [3, 4]]
在a
中,列表项为1,2和3.我想将[1,2]
,[2,3]
和[3,4]
中的每一个视为列表项b
,仅用于执行转置。我希望输出如下:
array([[[1,2]],
[[2,3]],
[[3,4]]])
一般来说,我希望能够指定列表项的外观,并根据它进行矩阵转置。
我可以写几行代码来完成上述操作,但我提出这个问题的目的是为了找出是否有内置的numpy功能或pythonic方式来执行此操作。
编辑:下面的unutbu输出与我上面的输出相匹配。但是,我想要一个适用于更一般情况的解决方案。我在下面发布了另一个输入/输出。我最初的例子不够描述,无法传达我想说的话。让b
中的项目为[1,2]
,[2,3]
,[3,4]
和[5,6]
。然后,下面给出的输出将是在更高维度元素上进行矩阵转置。更一般地说,一旦我描述了“项目”的样子,我想知道是否有办法做一些像转置的事情。
Input: b = [[[1, 2], [2, 3]], [[3, 4], [5,6]]]
Output: array([[[1,2], [3,4]],
[[2,3], [5,6]]])
答案 0 :(得分:4)
您想要的阵列有形状(3,1,2)。 b
有形状(3,2)。要在中间粘贴额外的轴,请使用b[:,None,:]
或(等效)b[:, np.newaxis, :]
。在section on Basic Slicing中查找“newaxis”。
In [178]: b = np.array([[1, 2], [2, 3], [3, 4]])
In [179]: b
Out[179]:
array([[1, 2],
[2, 3],
[3, 4]])
In [202]: b[:,None,:]
Out[202]:
array([[[1, 2]],
[[2, 3]],
[[3, 4]]])
另一个有用的工具是np.swapaxes:
In [222]: b = np.array([[[1, 2], [2, 3]], [[3, 4], [5,6]]])
In [223]: b.swapaxes(0,1)
Out[223]:
array([[[1, 2],
[3, 4]],
[[2, 3],
[5, 6]]])
转置,b.T
与交换第一个和最后一个轴b.swapaxes(0,-1)
相同:
In [226]: b.T
Out[226]:
array([[[1, 3],
[2, 5]],
[[2, 4],
[3, 6]]])
In [227]: b.swapaxes(0,-1)
Out[227]:
array([[[1, 3],
[2, 5]],
[[2, 4],
[3, 6]]])
摘要:
None
)添加新轴。 (因此,增加数组的维度)