使用Python转换此Matlab矩阵
我在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
[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]]