python - 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
解决方案
您可以简单地创建一个包含许多引用的列表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,))
推荐阅读
- asp.net-mvc - 使用 Azure AD 的 MVC 5 无法注销
- python - Flask-SQLAlchemy ON DELETE SET DEFAULT
- java - 泛型/接口方法不适用
- r - R:基于变量创建重复行(首选 dplyr)
- spring-boot - 如何在 Spring Boot 2 中处理 security.enable-csrf?
- python - 在一个 Pandas 系列中找到两个近似值。根据条件在另一个上创建标志
- azure - 通过 IP 访问 Azure 网站导致 404 错误
- android - 使用 Glide 加载图像需要太多时间
- sas - 如何在 SAS 中找到一个组中的人员百分比?
- json - JSON 语法数据格式