替换数组中的负片,Python
如何编写用0替换数组中所有负数的函数替换数组中的负片,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
以下是我目前掌握的信息:
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)