[英]Negate all list values in a 2D array
我的腳本的以下兩個版本可以正常工作:
matrix = [[1, -2, 3], [-4, 5, -6], [7, -8, 9]]
def negate(amatrix):
for alist in matrix:
for i in range(len(alist)):
alist[i] = -alist[i]
return amatrix
print(negate(matrix))
產量:[[-1,2,-3],[4,-5,6],[-7,8,-9]]
與此版本一樣:
matrix = [[1, -2, 3], [-4, 5, -6], [7, -8, 9]]
def negate(amatrix):
newmatrix = []
for alist in amatrix:
newlist = [-x for x in alist]
newmatrix.append(newlist)
return newmatrix
print(negate(matrix))
我正在嘗試使用一種理解來更改值,如第一個版本。
我有這個:
matrix = [[1, -2, 3], [-4, 5, -6], [7, -8, 9]]
def negate(amatrix):
for alist in matrix:
alist = [-x for x in alist]
return amatrix
print(negate(matrix))
第三個版本確實否定了每個列表中的單個值,但是更改未保存在矩陣中,即,我希望將列表值更改為適當的位置。
有沒有辦法使用理解來否定各個列表值,還是我必須使用索引版本(上面的第一個版本)?
列表推導無法正確執行。 當您說x = [-i for i in x]
,將首先評估右側並將其分配給x
。 即使將其分配給相同的變量,解決方案也不是就地。
您可能想要的是矢量就地解決方案。 這受numpy
支持:
import numpy as np
arr = np.array([[1, -2, 3], [-4, 5, -6], [7, -8, 9]])
arr *= -1
# array([[-1, 2, -3],
# [ 4, -5, 6],
# [-7, 8, -9]])
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.