Python 在函数调用期间更新时,矩阵元素不应大于最大值

Python 在函数调用期间更新时,矩阵元素不应大于最大值,python,Python,我正在使用以下fn: def TABs4_tmp(x,ee,M,nrm1): M += dot(sign(ee),sign(x.T))/nrm1 ex: nrm1 is scalar= 2^10 ee is scalar= 1 x is an array of 100 elements 我在程序中多次调用此函数,每次都会更新M数组(大小为100)的每个元素的值。目前M的元素可以接受任何值,但我需要元素值受某个最大值的限制,请参见2 M

我正在使用以下fn:

def TABs4_tmp(x,ee,M,nrm1):  
    M += dot(sign(ee),sign(x.T))/nrm1 

ex:
      nrm1 is scalar= 2^10  
      ee is scalar= 1  
      x is an array of 100 elements
我在程序中多次调用此函数,每次都会更新M数组(大小为100)的每个元素的值。目前M的元素可以接受任何值,但我需要元素值受某个最大值的限制,请参见2

M的元素,那些值小于2的元素可以在调用此函数时更新为新值,但不应更新那些达到最大值2的元素

我是Python新手,请帮助我提出任何解决方案。

def TABs4\u tmp(x,ee,M,nrm1):
def TABs4_tmp(x,ee,M,nrm1): 
    temp = dot(sign(ee),sign(x.T))/nrm1 
    if temp<2:
        M += temp
温度=点(符号(ee)、符号(x.T))/nrm1
如果tempNumpy具有这方面的功能

它们被称为s


这应该只会添加到未屏蔽的部分。

更新M的元素是什么意思?您正在通过
M+=dot(符号(ee),符号(x.T))/nrm1向M添加新元素。。你是对的。我试过上面的解决方案,但似乎不起作用。M_tmp=M;def TABs4_tmp(x,ee,M,M_tmp,nrm1):M=ma。掩蔽_更大(M_tmp,1)M=ma。掩蔽_更大(M,-1)M+=dot(符号(ee),符号(x.T))/nrm1'M始终为零。不知道为什么?嗨,这个命令屏蔽了大于阈值的元素。你知道我们是否可以用阈值替换屏蔽值吗?谢谢。我不知道有没有合适的方法,你可以试试像
M=M*M.mask+!M.mask*2
。但我不知道这是否真的有效…temp将是一个数组,我认为temp无法与标量值2进行比较。我试过了,给我一个错误。有什么想法吗?@user2486253:你想把temp中小于2的元素添加到M中吗?
import numpy.ma as ma

M = ma.MaskedAray(M)

def TABs4_tmp(x,ee,M,nrm1):
    M = ma.masked_greater(2,M)
    M += dot(sign(ee),sign(x.T))/nrm1