首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转置3D数组和多元素内存邻接性

转置3D数组和多元素内存邻接性
EN

Stack Overflow用户
提问于 2019-11-28 19:38:05
回答 1查看 67关注 0票数 1

我有一个巨大的3D数组,看起来像A.shape = (100000, 5000, 50)。我需要将其转置为A.shape = (50, 5000, 100000)形式的数组。然后,我需要对A中包含的50个矩阵中的每个矩阵执行a = a.T @ a操作。这给出了一个形式为A.shape = (50, 5000, 5000)的3D数组。

如果我用A.transpose(2, 1, 0) @ A.transpose(2, 0, 1)这样做,单矩阵乘法a = a.T @ a会比a不是从A中提取出来的情况慢一千倍。

问题是,在转置之后,3D数组不是连续的。我试着在转置后使用np.ascontiguousarray()copy()。它得到了改进,但仍然较慢,并且需要花费相当多的时间进行复制。

有没有人能建议一个更好的选择?特别是,我正在尝试使用np.einsum,但是我不能。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-11-28 21:48:39

您可以尝试以下操作:

代码语言:javascript
复制
A = ...
b = np.einsum('jki,jli->ikl', A, A)
print(b.shape)
# (50, 5000, 5000)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59088013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档