首页 > 解决方案 > NumPy 中将 A x B 矩阵转换为 A x B x K 矩阵的最佳方法是什么?

问题描述

假设 alpha 是一个大小为 (3,2) 的随机矩阵。

在 Python 中将 alpha 重塑为形状为 (3,2,k) 的新矩阵 beta 的最佳方法是什么,条件是 i 在 0 到 k-1 的值范围内,beta[3,2, i] == [阿尔法] ?

a = np.random.random((3,2))
k = np.random.randint(1000)
b = np_funct(a, k) # <- function I am looking for
assert b.shape == (3,2,k)    
condition = all([b[:,:,i] == a for i in range(k))
assert condition

标签: pythonnumpy

解决方案


您可以简单地创建一个包含许多引用的列表a并将它们堆叠起来。

np.stack([a] * k, axis=2)

您可以类似地从对 的引用列表中创建一个数组a,该矩阵将具有形状,(k, 3, 2)然后您使用转置对轴重新排序

np.array([a] * 100).transpose((1,2,0))

如果您不想为每个索引创建单独的副本,您可以做的是使用跨步技巧,以便所有副本都a引用相同的内存位置。如果不必修改结果,那就太好了。如果您的阵列很大(您最终会节省内存),则特别有利。

np.lib.stride_tricks.as_strided(a, a.shape + (k,), a.strides + (0,))

推荐阅读