Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
替换数组中的负片,Python_Python_Arrays - Fatal编程技术网

替换数组中的负片,Python

替换数组中的负片,Python,python,arrays,Python,Arrays,如何编写用0替换数组中所有负数的函数以下是我目前掌握的信息: def negativesToZero(A): for x in A: if x < 0: A.append(0) else: pass print A A = ([[1,-2],\ [-2,1]]) negativesToZero(A) def negativesToZero(A): 对于A中的x: 如果x

如何编写用0替换数组中所有负数的函数
以下是我目前掌握的信息:

def negativesToZero(A):
    for x in A:
        if x < 0:
            A.append(0)
    else:
        pass
    print A 
A = ([[1,-2],\
      [-2,1]])
negativesToZero(A)
def negativesToZero(A):
对于A中的x:
如果x<0:
A.append(0)
其他:
通过
打印
A=([[1,-2]\
[-2,1]])
负零(A)

因为
A
是一个列表列表:

>>> A = [[1, -2], [-2, 1]]

>>> for lst in A:
...     for i, val in enumerate(lst):
...         lst[i] = max(val, 0)

>>> print A
[[1, 0], [0, 1]]
或者使用列表理解:

>>> A = [[max(val, 0) for val in lst] for lst in A]

浏览
列表中的每个子列表
。对于每个子列表,创建一个新的子列表,将所有负项转换为
0
。最整洁的方式是理解:

A = [[1,-2], [-2,1]]
A = [[item if item >= 0 else 0 for item in l] for l in A]
结果:

[[1, 0], [0, 1]]

下面是一个递归实现,它将处理任何类型的列表,其中包含任何类型的输入:

def convertToZero(arr):
    for i in range(len(arr)):
        if type(arr[i]) == int and arr[i] < 0:
            arr[i] = 0
        elif type(arr[i]) == list:
            convertToZero(arr[i])
    return arr

result = convertToZero( [[1,-2], ['hello',[-2,1]], [-1,'world']] )
print result
# [[1, 0], ['hello', [0, 1]], [0, 'world']]
def转换器归零(arr):
对于范围内的i(len(arr)):
如果类型(arr[i])==int且arr[i]<0:
arr[i]=0
elif类型(arr[i])==列表:
转换为零(arr[i])
返回arr
结果=convertToZero([[1,-2],'hello',[-2,1]],[-1,'world']]))
打印结果
#[[1,0],“你好”,[0,1]],[0,“世界”]]

以下是一个简单易懂的答案,大致描述了您一开始尝试做的事情:

def negativesToZero(A):
    index  = 0 #Track your index

    for x in A:
        if isinstance(x, list): #Calling the program recursively on nested lists
            A[index] = negativesToZero(x)

        elif x < 0:
            A[index] = 0 #Makes negatives 0

        else:
            pass #Ignores zeros and positives

        index += 1 #Move on to next index
    print A
    return A

如果您想要一个数组操作,您应该创建一个合适的数组来开始

A=array([[1,-2],[-2,1]])
使用对索引的布尔运算,像您这样的数组理解可以是一行的:

A[A<0]=0

A[AGrab一支笔和一张纸,用手检查这个代码。你会发现它做了一些你不想做的奇怪的事情。这适用于二维int列表,比如A:[list(map(lambda x:x if x>=0 else-x,A))A in A]希望如果我把它拼出来会更清楚,但是对于循环,绝对可以用列表理解来代替。
import numpy as np

listOnums = np.random.normal(size = 300)
listOnums = listOnums.reshape(3,10,10)


def negToZero(arrayOnums):
    '''
    Takes an array of numbers, replaces values less than 0 with 0
    and retuns an array of numbers.
    '''
    dims = arrayOnums.shape
    flatNums = arrayOnums.flatten()

    for num,x in enumerate(flatNums):

        if x >= 0: pass
        else:
            flatNums[num] = 0

        arrayOnums = flatNums.reshape(dims)

    return arrayOnums

negToZero(listOnums) 
A=array([[1,-2],[-2,1]])
A[A<0]=0
def positive_attitude(x):
    x[x<0]=0
    return x
print positive_attitude(A)