如果所有行都至少包含一个负元素,则更改矩阵中元素的符号
Change the signs of the elements in a matrix if all rows contain at least one negative element
我想检查矩阵的所有行是否至少包含一个负元素。如果是,改变矩阵所有元素的符号。
这是我的尝试,但这种方法只是改变了负数元素的符号:
matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] < 0:
print(matrix[i][j]*(-1))
编辑:
所以首先你可以检查矩阵是否包含至少一个负元素,然后改变所有元素的符号。
matrix = [[5, -6, 2], [7, 2, 3], [8, 4, -9]]
hasNegativeElement = False
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] < 0:
hasNegativeElement = True
break
if hasNegativeElement:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
matrix[i][j] *= (-1)
你可以用 numpy
轻松做到:
import numpy as np
In [108]: np.array(matrix) * -1
Out[108]:
array([[-5, 6, -2],
[-7, -2, -3],
[-8, -4, 9]])
或者如果你想在最后列出一个列表,你可以使用 tolist
方法:
In [124]: (np.array(matrix) * -1).tolist()
Out[124]: [[-5, 6, -2], [-7, -2, -3], [-8, -4, 9]]
试试这个:
allRowsNegative = True;
for i in range(len(matrix)):
foundNegative = False;
for j in range(len(matrix[i])):
foundNegative = (foundNegative or matrix[i][j] < 0);
allRowsNegative = (allRowsNegative and foundNegative);
if allRowsNegative:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j]*(-1));
else:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j]);
非 numpy 解决方案:
>>> matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
>>> if all(any(x < 0 for x in sub) for sub in matrix):
... result = [[-x for x in sub] for sub in matrix]
...
>>> result
[[-5, 6, -2], [-7, 2, -3], [-8, -4, 9]]
numpy解决方案
>>> import numpy as np
>>> matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
>>> m_arr = np.array(matrix)
>>> if np.all(np.any(m_arr < 0, axis=1)):
... result = (m_arr*(-1)).tolist()
...
>>> result
[[-5, 6, -2], [-7, 2, -3], [-8, -4, 9]]
您可以使用 np.any
检查每一行是否有负元素,这会给出一个数组,然后您可以通过 np.all
检查是否所有行都具有负元素。如果是则反转矩阵的符号。
import numpy as np
A = np.array([[5, -6, 2], [7, 2, 3], [8, 4, -9]])
if np.all(np.any(A<0,axis=1)):
A *= -1
我想到的最简单的方法:
m = [[5,-6, 2], [7, -2, 3], [8, 4, -9], [2 , 4 ,6]]
for i in range(len(m)):
flag = False
for y in m[i]:
if(y<0):
flag = True
break
if (flag == True):
for j in range(len(m[i])):
m[i][j] = -1 * m[i][j]
print (m) # [[-5, 6, -2], [-7, 2, -3], [-8, -4, 9], [2, 4, 6]]
检查所有行是否包含负数的好方法(假设您的矩阵至少为 1x1,不为空):
max(map(min, matrix)) < 0
总的来说:
if max(map(min, matrix)) < 0:
matrix[:] = [[-x for x in row] for row in matrix]
我想检查矩阵的所有行是否至少包含一个负元素。如果是,改变矩阵所有元素的符号。
这是我的尝试,但这种方法只是改变了负数元素的符号:
matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] < 0:
print(matrix[i][j]*(-1))
编辑:
所以首先你可以检查矩阵是否包含至少一个负元素,然后改变所有元素的符号。
matrix = [[5, -6, 2], [7, 2, 3], [8, 4, -9]]
hasNegativeElement = False
for i in range(len(matrix)):
for j in range(len(matrix[i])):
if matrix[i][j] < 0:
hasNegativeElement = True
break
if hasNegativeElement:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
matrix[i][j] *= (-1)
你可以用 numpy
轻松做到:
import numpy as np
In [108]: np.array(matrix) * -1
Out[108]:
array([[-5, 6, -2],
[-7, -2, -3],
[-8, -4, 9]])
或者如果你想在最后列出一个列表,你可以使用 tolist
方法:
In [124]: (np.array(matrix) * -1).tolist()
Out[124]: [[-5, 6, -2], [-7, -2, -3], [-8, -4, 9]]
试试这个:
allRowsNegative = True;
for i in range(len(matrix)):
foundNegative = False;
for j in range(len(matrix[i])):
foundNegative = (foundNegative or matrix[i][j] < 0);
allRowsNegative = (allRowsNegative and foundNegative);
if allRowsNegative:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j]*(-1));
else:
for i in range(len(matrix)):
for j in range(len(matrix[i])):
print(matrix[i][j]);
非 numpy 解决方案:
>>> matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
>>> if all(any(x < 0 for x in sub) for sub in matrix):
... result = [[-x for x in sub] for sub in matrix]
...
>>> result
[[-5, 6, -2], [-7, 2, -3], [-8, -4, 9]]
numpy解决方案
>>> import numpy as np
>>> matrix = [[5, -6, 2], [7, -2, 3], [8, 4, -9]]
>>> m_arr = np.array(matrix)
>>> if np.all(np.any(m_arr < 0, axis=1)):
... result = (m_arr*(-1)).tolist()
...
>>> result
[[-5, 6, -2], [-7, 2, -3], [-8, -4, 9]]
您可以使用 np.any
检查每一行是否有负元素,这会给出一个数组,然后您可以通过 np.all
检查是否所有行都具有负元素。如果是则反转矩阵的符号。
import numpy as np
A = np.array([[5, -6, 2], [7, 2, 3], [8, 4, -9]])
if np.all(np.any(A<0,axis=1)):
A *= -1
我想到的最简单的方法:
m = [[5,-6, 2], [7, -2, 3], [8, 4, -9], [2 , 4 ,6]]
for i in range(len(m)):
flag = False
for y in m[i]:
if(y<0):
flag = True
break
if (flag == True):
for j in range(len(m[i])):
m[i][j] = -1 * m[i][j]
print (m) # [[-5, 6, -2], [-7, 2, -3], [-8, -4, 9], [2, 4, 6]]
检查所有行是否包含负数的好方法(假设您的矩阵至少为 1x1,不为空):
max(map(min, matrix)) < 0
总的来说:
if max(map(min, matrix)) < 0:
matrix[:] = [[-x for x in row] for row in matrix]