使用Python转换此Matlab矩阵

使用Python转换此Matlab矩阵,python,matlab,numpy,Python,Matlab,Numpy,我在Matlab中有这个代码 [r,c] = find(abs(fh) <= 2 ) [r,c]=find(abs(fh)您需要做的就是转置numpy矩阵,注意,其中以与matlab相反的顺序返回索引 Matlab: fh = rand(5,2) % fh = % % 0.39936 0.72931 % 0.45787 0.23656 % 0.30444 0.52994 % 0.40239 0.64400 % 0.89489 0.470

我在Matlab中有这个代码

[r,c] = find(abs(fh) <= 2 )

[r,c]=find(abs(fh)您需要做的就是转置
numpy
矩阵,注意
,其中
以与matlab相反的顺序返回索引

Matlab:

fh = rand(5,2)
% fh =
% 
%    0.39936   0.72931
%    0.45787   0.23656
%    0.30444   0.52994
%    0.40239   0.64400
%    0.89489   0.47090
[r,c] = find(abs(fh) <= 0.4 )
% r =
% 
%    1
%    3
%    2

% c =
% 
%    1
%    1
%    2

这个解决方案的问题是res是tuple类型的,事实上我不能对它进行res.size。如果我能以某种方式将它转换为向量,这将是非常好的,就像你对np.array函数所做的一样。我正在尝试,但我得到了AttributeError:“list”对象没有属性“size”。似乎res仍然没有被考虑array@claw91因此,与其使用代码>列表
只需使用
np.array
,然后获得
形状
,就像我的编辑
arg一样,其中
转置(res)
做一个(n,2)数组。@hpaulj您完全正确,我将它添加到了我的答案中。感谢您启发我
nonzero
生成一个元组,可以直接用于索引
fh
argwhere
对其应用
转置
,但不能用作索引。使用[0]会丢弃列索引数组,[1].你想用这个副本做什么?是的,这是一个错误,因为我对FH做了错误的假设。你是否尝试过r,c=np。非零(..)
?这应该和你的MATLAB解包一样=…`Dos.yes,我正在尝试非零,因为我意识到我实际上只对r感兴趣,而对c不感兴趣。所以代码现在是rc=np.nonzero(np.abs(fh)
fh = rand(5,2)
% fh =
% 
%    0.39936   0.72931
%    0.45787   0.23656
%    0.30444   0.52994
%    0.40239   0.64400
%    0.89489   0.47090
[r,c] = find(abs(fh) <= 0.4 )
% r =
% 
%    1
%    3
%    2

% c =
% 
%    1
%    1
%    2
import numpy as np

fh = np.array([[0.39936   ,0.72931],
[0.45787   ,0.23656],
[0.30444   ,0.52994],
[0.40239   ,0.64400],
[0.89489   ,0.47090]])

res = np.where(np.abs(fh.T) <= 0.4)
print(res)
# (array([0, 0, 1]), array([0, 2, 1]))
res = np.array(list(map(np.array, np.where(np.abs(fh.T) <= 0.4))))
print(res.T)
print(res.T.shape)

# [[0 0]
#  [0 2]
#  [1 1]]
# (3, 2)
res = np.argwhere(np.abs(fh.T) <= 0.4)
print(res)
# [[0 0]
#  [0 2]
#  [1 1]]