尽管在线上有很多示例,但我无法在python中使用等效的MATLAB repmat

德拉祖莱

我试图做一些numpy矩阵数学运算,因为我需要从MATLAB复制repmat函数。我知道网上有上千个示例,但我似乎无法使其中的任何一个正常工作。

以下是我尝试运行的代码:

def getDMap(image, mapSize):
    newSize = (float(mapSize[0]) / float(image.shape[1]), float(mapSize[1]) / float(image.shape[0]))
    sm = cv.resize(image, (0,0), fx=newSize[0], fy=newSize[1])
    for j in range(0, sm.shape[1]):
        for i in range(0, sm.shape[0]):
            dmap = sm[:,:,:]-np.array([np.tile(sm[j,i,:], (len(sm[0]), len(sm[1]))) for k in xrange(len(sm[2]))])
    return dmap 

函数getDMap(image,mapSize)需要一个OpenCV2 HSV图像作为其图像参数,它是一个3维的numpy数组:[:,:,:]它还期望一个包含2个元素的元组作为其imSize参数,当然要确保传递参数的函数考虑到在numpy数组中行和列被交换(不是:x,y,而是:y,x)。

然后,newSize包含一个包含分数的元组,这些分数用于将输入图像调整为特定比例,并且sm成为输入图像的调整大小版本。这一切都很好。

这是我的目标:

下一行:

np.array([np.tile(sm[i,j,:], (len(sm[0]), len(sm[1]))) for k in xrange(len(sm[2]))])

功能应等同于MATLAB表达式:

repmat(sm(j,i,:),[size(sm,1) size(sm,2)])

这是我的问题:

为此,将尺寸为800x479x3的OpenCV2图像作为图像参数传递,并将64,48 (元组)作为imSize参数传递但是,当对此进行测试时,出现以下ValueError:

dmap = sm [:,:,:]-np.array([np.tile(sm [i,j ,:],(len(sm [0]),len(sm [1])))) xrange(len(sm [2]))])
ValueError:操作数无法与形状(48,64,3)(64,64,192)一起广播

因此,似乎数组尺寸不匹配,而numpy对此有问题。但是我的问题是什么?我该如何工作呢?

hpaulj

这两个计算匹配:

octave:26> sm=reshape(1:12,2,2,3)
octave:27> x=repmat(sm(1,2,:),[size(sm,1) size(sm,2)])
octave:28> x(:,:,2)
   7   7
   7   7


In [45]: sm=np.arange(1,13).reshape(2,2,3,order='F')
In [46]: x=np.tile(sm[0,1,:],[sm.shape[0],sm.shape[1],1])
In [47]: x[:,:,1]
Out[47]: 
array([[7, 7],
       [7, 7]])

运行:

 sm[:,:,:]-np.array([np.tile(sm[0,1,:], (2,2,1)) for k in xrange(3)])

但是它会生成一个(3,2,2,3)数组,并在第一个维度上进行复制。我认为您不希望出现这种k循环。

目的是什么?

 for i in ...:
     for j in ...:
         data = ...

您只会从上次迭代中获得结果。你要data += ...吗?如果是这样,这可能会起作用(对于(N,M,K)形状的sm

np.sum(np.array([sm-np.tile(sm[i,j,:], (N,M,1)) for i in xrange(N) for j in xrange(M)]),axis=0)

z = np.array([np.tile(sm[i,j,:], (N,M,1)) for i in xrange(N) for j in xrange(M)]),axis=0)
np.sum(sm - z, axis=0)  # let numpy broadcast sm

其实我什至不需要瓷砖。让广播来做这项工作:

 np.sum(np.array([sm-sm[i,j,:] for i in xrange(N) for j in xrange(M)]),axis=0)

我可以使用摆脱循环repeat

sm1 = sm.reshape(N*M,L)  # combine 1st 2 dim to simplify repeat
z1 = np.repeat(sm1, N*M, axis=0).reshape(N*M,N*M,L)
x1 = np.sum(sm1 - z1, axis=0).reshape(N,M,L)

我也可以将广播应用于最后一种情况

x4 = np.sum(sm1-sm1[:,None,:], 0).reshape(N,M,L)
# = np.sum(sm1[None,:,:]-sm1[:,None,:], 0).reshape(N,M,L)

随着sm我要扩大(和和)2个维度:

x5 = np.sum(np.sum(sm[None,:,None,:,:]-sm[:,None,:,None,:],0),1)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

向量化:敌还是友?bsxfun / arrayfun避免循环,repmat,置换,挤压等

来自分类Dev

repmat功能无法正常工作

来自分类Dev

使用repmat在第一个维度之前创建维度

来自分类Dev

在MATLAB中用bsxfun替换repmat

来自分类Dev

repmat,矩阵的大小或使用次数

来自分类Dev

Matlab优化查询,避免了repmat

来自分类Dev

Matlab-bsxfun不再比repmat快吗?

来自分类Dev

结合repmat和julia转置

来自分类Dev

如何在不使用repmat函数的情况下复制矩阵的元素

来自分类Dev

如何避免在我的Python示例中使用staticmethod

来自分类Dev

在MATLAB中使用repmat复制Kronecker张量

来自分类Dev

MATLAB缩放repmat

来自分类Dev

在3D矩阵中能更快地替代“ repmat”和“ permute”吗?

来自分类Dev

Julia 1.4中未定义的repmat的高效代理功能

来自分类Dev

解决问题的能力我有一个要整理的小示例任务,但我无法获得任何帮助?

来自分类Dev

尽管可以获取其他标签,但我无法使用Beautifulsoup获得该标签

来自分类Dev

尽管具有管理员访问权限,但我仍无法卸载Ask Toolbar更新程序?

来自分类Dev

这个小夹子在我的电源线上有什么作用?

来自分类Dev

使用python登录网站时,我尝试了很多示例,但是我在做什么错呢?

来自分类Dev

Flexslider可在我的计算机上使用,但在线上传后无法加载

来自分类Dev

使用参数,但我无法获得价值

来自分类Dev

KVO方法observeValueForKeyPath会通知我有关更改的信息,但我无法在viewDidLoad中使用它

来自分类Dev

与R中的Repmat类似的功能

来自分类Dev

Matlab:创建行向量相同的矩阵。使用repmat()或乘以ones()

来自分类Dev

无法将MATLAB转换为repmat和对称性的Python代码

来自分类Dev

将 repmat 应用于具有不同输入的 Matlab 中矩阵的每一行

来自分类Dev

在 Matlab 中使用 COM 端口在线

来自分类Dev

尽管在 ubuntu 中安装了驱动程序,但我无法使用无线设置!

来自分类Dev

我在课堂上有两个内部课程,但我无法快速初始化课程

Related 相关文章

  1. 1

    向量化:敌还是友?bsxfun / arrayfun避免循环,repmat,置换,挤压等

  2. 2

    repmat功能无法正常工作

  3. 3

    使用repmat在第一个维度之前创建维度

  4. 4

    在MATLAB中用bsxfun替换repmat

  5. 5

    repmat,矩阵的大小或使用次数

  6. 6

    Matlab优化查询,避免了repmat

  7. 7

    Matlab-bsxfun不再比repmat快吗?

  8. 8

    结合repmat和julia转置

  9. 9

    如何在不使用repmat函数的情况下复制矩阵的元素

  10. 10

    如何避免在我的Python示例中使用staticmethod

  11. 11

    在MATLAB中使用repmat复制Kronecker张量

  12. 12

    MATLAB缩放repmat

  13. 13

    在3D矩阵中能更快地替代“ repmat”和“ permute”吗?

  14. 14

    Julia 1.4中未定义的repmat的高效代理功能

  15. 15

    解决问题的能力我有一个要整理的小示例任务,但我无法获得任何帮助?

  16. 16

    尽管可以获取其他标签,但我无法使用Beautifulsoup获得该标签

  17. 17

    尽管具有管理员访问权限,但我仍无法卸载Ask Toolbar更新程序?

  18. 18

    这个小夹子在我的电源线上有什么作用?

  19. 19

    使用python登录网站时,我尝试了很多示例,但是我在做什么错呢?

  20. 20

    Flexslider可在我的计算机上使用,但在线上传后无法加载

  21. 21

    使用参数,但我无法获得价值

  22. 22

    KVO方法observeValueForKeyPath会通知我有关更改的信息,但我无法在viewDidLoad中使用它

  23. 23

    与R中的Repmat类似的功能

  24. 24

    Matlab:创建行向量相同的矩阵。使用repmat()或乘以ones()

  25. 25

    无法将MATLAB转换为repmat和对称性的Python代码

  26. 26

    将 repmat 应用于具有不同输入的 Matlab 中矩阵的每一行

  27. 27

    在 Matlab 中使用 COM 端口在线

  28. 28

    尽管在 ubuntu 中安装了驱动程序,但我无法使用无线设置!

  29. 29

    我在课堂上有两个内部课程,但我无法快速初始化课程

热门标签

归档