python - 将 MATLAB 数组转换为 Numpy 数组
问题描述
我正在尝试将我的 MATLAB 代码转换为 Python。
在 MATLAB 中,我有OP
哪个是300x300 double
数组,mask
哪个是300x300 logical
数组。
t1 = mask(:)
等于90000x1 logical
数组。
t2 = OP(mask(:))
equals的输出怎么可能是一个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 中的类似变量具有相同的大小。
如果有人可以帮助我,我将不胜感激。
解决方案
在 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])
推荐阅读
- javascript - React Native 如何使轮播重定向到另一个页面并选择相应的 id
- kubernetes - 在没有 k8s 集群的计划期间使用 Terraform 数据资源 kubernetes_all_namespaces
- google-cloud-platform - Cloud Run 错误:内部系统错误。缺少必要的许可
- r - 在不使用任何包的情况下将 081020 转换为日期格式 08/10/20
- vba - 计算行单元格并复制和粘贴
- python-3.x - 套接字 sendto 在 Android 上不起作用(kivy,buildozer)
- c++ - 在 C++ 中正确实现合并插入排序,并且可以使用
- c# - 将下拉列表添加到 DataGrid 列并在运行时填充行 C#
- python - Trying to write a code for translating input
- git - 使用大文件设置远程 Git 的最佳方法