Skip to main content
 首页 » 编程设计

python之Python 中的矩阵赋值

2025年05月04日13luoye11

我正在尝试将 Matlab 代码转换为 Python,但在转换一行时遇到问题。我对不对?我不知道如何在 Python 中进行赋值。

Matlab:

 for j=1:a 
     diff_a=zeros(1,4); 
     diff_b=zeros(1,4); 
     for i=1:4 
         diff_a(i)=abs(ssa(j)-check(i)); 
         diff_b(i)=abs(ssb(j)-check(i)); 
     end 
     [Y_a,I_a]=min(diff_a); 
 end 

python :

for j in arange(0,a): 
    diff_a=zeros(4) 
    diff_b=zeros(4) 
    for i in arange(0,4): 
        diff_a[i]=abs(ssa[j]-check[i]) 
        diff_b[i]=abs(ssb[j]-check[i]) 
    [Y_a,I_a]=min(diff_a) 

最后一行给出了这个错误:

TypeError: 'numpy.float64' object is not iterable

问题出在最后一行。 diff_a 是一个复数数组。很抱歉没有提供完整的代码(它太大了)。

请您参考如下方法:

当你在 Matlab 中执行 [C,I] = min(...) 时,它 means最小值将存储在 C 中,最小值的索引将存储在 I 中。在 Python/numpy 中,你需要为此调用两次。在你的例子中:

Y_a, I_a = diff_a.min(), diff_a.argmin() 

但下面是更好的代码:

I_a = diff_a.argmin() 
Y_a = diff_a[I_a] 

您的代码可以再简化一点:

import numpy as np 
 
for j in range(a): 
    diff_a = np.abs(ssa[j] - check) 
    diff_b = np.abs(ssb[j] - check) 
    I_a = diff_a.argmin() 
    Y_a = diff_a[I_a]