【问题标题】:Converting MATLAB array to Numpy array将 MATLAB 数组转换为 Numpy 数组
【发布时间】:2020-05-02 15:29:31
【问题描述】:

我正在尝试将我的 MATLAB 代码转换为 Python。

在 MATLAB 中,OP 是 300x300 double 数组,mask 是 300x300 logical 数组。

t1 = mask(:) 等于 90000x1 logical 数组。

t2 = OP(mask(:)) 的输出怎么可能等于57664x1 double 数组?

这是我的 MATLAB 代码:

OP=repmat(Ph,size(image,1),1).*repmat(Pv,1,size(image,2));
t1 = mask(:)
t2 = OP(mask(:))
data=sort(OP(mask(:)),'descend'); 

另外,在 Python 中,我使用 Numpy 来实现我的 MATLAB 代码,但 OP[mask] 是 MATLAB 转换的 OP(mask(:)) 是 90000x1x300 ndarray。我不知道如何解决它。

这是我的python代码:

OP = np.matlib.repmat(Ph, image.shape[0], 1) * np.matlib.repmat(Pv, 1, image.shape[1])
t2 = OP[mask]
data = -np.sort(-OP[mask], axis=0)

我知道t1、OP 和 mask 的大小与其在 MATLAB 中的类似变量的大小相同。

如果有人可以帮助我,我将不胜感激。

【问题讨论】:

  • 你能把你的问题改写成MCVE吗?

标签: python arrays matlab numpy


【解决方案1】:

在 Octave 会话中:

>> OP = reshape(1:16,4,4);
>> OP
OP =

    1    5    9   13
    2    6   10   14
    3    7   11   15
    4    8   12   16

>> mask = logical([1,0,0,1;0,1,1,1;0,0,0,0;1,0,1,0])
mask =

  1  0  0  1
  0  1  1  1
  0  0  0  0
  1  0  1  0

>> OP(mask)
ans =

    1
    4
    6
   10
   12
   13
   14

ravel 没有任何区别:

>> OP(mask(:))
ans =

    1
    4
    6
   10
   12
   13
   14

在ipython/numpy 会话中:

In [368]: OP = np.arange(1,17).reshape(4,4)                                                            
In [369]: OP                                                                                           
Out[369]: 
array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16]])
In [370]: mask = np.array([[1,0,0,1],[0,1,1,1],[0,0,0,0],[1,0,1,0]]).astype(bool)                      
In [371]: mask                                                                                         
Out[371]: 
array([[ True, False, False,  True],
       [False,  True,  True,  True],
       [False, False, False, False],
       [ True, False,  True, False]])
In [372]: OP[mask]                                                                                     
Out[372]: array([ 1,  4,  6,  7,  8, 13, 15])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2021-12-29
    • 2017-03-08
    • 2021-03-10
    • 2016-01-21
    • 2011-11-27
    相关资源
    最近更新 更多