Python中的矩阵赋值

mar*_*yer 1 python matlab numpy

我试图将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
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

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)
Run Code Online (Sandbox Code Playgroud)

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

TypeError:'numpy.float64'对象不可迭代

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

tia*_*ago 5

当您[C,I] = min(...)在Matlab中进行操作时,意味着将最小值存储在最小值中,并将其存储在C最小值中I.在Python/numpy中,您需要两次调用.在你的例子中:

Y_a, I_a = diff_a.min(), diff_a.argmin()
Run Code Online (Sandbox Code Playgroud)

但以下是更好的代码:

I_a = diff_a.argmin()
Y_a = diff_a[I_a]
Run Code Online (Sandbox Code Playgroud)

您的代码可以简化一点:

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]
Run Code Online (Sandbox Code Playgroud)