【发布时间】:2023-01-24 21:52:44
【问题描述】:
我想问一下如何从 2D 数组有效地生成一个 numpy 3D 数组,每行填充新数组的对角线部分? 例如,输入的二维数组是
array([[1, 2],
[3, 4],
[5, 6],
[7, 8]])
我希望输出是
array([[[1, 0],
[0, 2]],
[[3, 0],
[0, 4]],
[[5, 0],
[0, 6]],
[[7, 0],
[0, 8]]])
通常,第一维的大小非常大。提前致谢。
【问题讨论】:
-
您目前的发电情况如何?为什么您认为它的效率不够高?
-
我使用了一个 for 循环来诊断每一行,但这效率很低,因为通常输入数组包含数千行
-
np.einsum('jk,kl->jkl', arr, np.eye(2, dtype=int))或arr[...,None] * np.eye(2, dtype=int)[None]
标签: python numpy numpy-ndarray