为什么用numpy/matlab分别处理相同的数据会得到不同的结果

2024-09-23 22:18:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个maxtrix数据,形状是10201*101,只包含0和1。下面的代码是用matlab/python实现的,但是得到的结果不同,我不知道为什么。。。你知道吗

BOUND        = load('C:\Users\1\Desktop\ct06\result_data116.dat');
BOUND = reshape(BOUND,101,101,101);
BOUND(:,:,[1,101]) = 1;          
BOUND(:,[1,101],:) = 1; 
Boundary = find(BOUND>0);  #matlab > Boubdary : 808243x1 double 

import numpy as np
BOUND = np.loadtxt(r'C:\Users\1\Desktop\ct06\result_data116.dat').reshape([101,101,101])
BOUND[:,:,[0,100]] = 1 
BOUND[:,[0,100],:] = 1
Boundary = np.where(BOUND>0)
print(Boundary[0].size) #python > 809074

我真的不知道为什么它有两个不同的边界(808243和809074)?你知道吗

我猜赋值操作是导致差异的原因(我推迟了赋值部分,然后他们得到了相同的结果)。。。你知道吗


Tags: 数据npresultusersdat形状bound赋值
2条回答

Matlab使用列的主要顺序,而python使用行的主要顺序(阅读https://en.wikipedia.org/wiki/Row-_and_column-major_order了解更多关于这意味着什么的细节)。例如,在python中

t = np.eye(3)
t[0,1] = 3
np.reshape(t, (9, 1))

结果

array([[ 1.],
   [ 3.],
   [ 0.],
   [ 0.],
   [ 1.],
   [ 0.],
   [ 0.],
   [ 0.],
   [ 1.]])

在matlab中使用相同的命令

t = eye(3)
t(1,2) = 3
reshape(t, 9, 1)

结果

ans=

 1
 0
 0
 3
 1
 0
 0
 0
 1

仅仅因为命令在两种不同的编程语言中具有相同的名称并不意味着它们将执行相同的操作。仅仅因为两个命令声称做相同的事情并不意味着结果不会有细微的差别。在抛出所有数据文件之前,总是用简单的输入测试代码。你知道吗

可能的原因是Matlab使用了列主顺序,所以

BOUND[:,[0,100],:] = 1

这种行为在Matlab和Python中是不同的。你知道吗

相关问题 更多 >