【问题标题】:Is there a Numpy or pyTorch function for this code?此代码是否有 Numpy 或 pyTorch 函数?
【发布时间】:2021-04-30 02:02:35
【问题描述】:

基本上有一个 Numpy 或 PyTorch 函数可以做到这一点:

vp_sa_s=mdp_data['sa_s'].detach().clone()
dims = vp_sa_s.size()
for i in range(dims[0]):
    for j in range(dims[1]):
        for k in range(dims[2]):
            # to mimic matlab functionality: vp(mdp_data.sa_s)
            try:
                vp_sa_s[i,j,k] = vp[mdp_data['sa_s'][i,j,k]]
            except:
                pass

鉴于vp_sa_s 的大小为(10,5,5),并且每个值都是有效的索引vp,即在0-9 范围内。 vp 的大小为(10,1),带有一堆随机值。

Matlab 使用vp(mdp_data.sa_s) 优雅而快速地完成它,这将形成一个新的(10,5,5) 矩阵。如果mdp_data.sa_s 中的所有值都是1,则结果将是(10,5,5) 张量,每个值都是vp 中的第一个值。

是否存在一个函数或方法可以在少于 O(N^3) 的时间内实现这一点,因为上面的代码效率非常低。

谢谢!

【问题讨论】:

    标签: python matlab numpy matrix pytorch


    【解决方案1】:

    有什么问题

    result = vp[vp_sa_s, 0]
    

    请注意,由于您的 vp 的形状为 (10, 1)(它有一个尾随单例维度),您需要在分配中添加 , 0] 索引以消除这个额外的维度。

    【讨论】:

    • 伙计,我觉得自己像个白痴。太感谢了!我太复杂了。您能否解释一下 Numpy 如何将其解释为“用值结果 [I] == vp[vp_sa_s[I]] 填充结果数组大小 == vp_sa_s。据我所知, vp[vp_sa_s] 将被解释为索引具有存储在 vp_sa_s 中的维度的 VP?
    • @joekadi Fancy Indexing in numpy 专门设计用于在这种情况下反映 MATLAB 功能。
    • @joekadi 你不应该对你的问题感到难过。
    • 如果您有兴趣,Here 是有关如何实施的更多信息。
    猜你喜欢
    • 2020-02-25
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多