如果所有行包含至少一个负元素,则更改矩阵中元素的符号

时间:2016-01-09 22:27:38

标签: python python-3.5

我想检查矩阵的所有行是否包含至少一个负面元素。如果是这样,请更改矩阵中所有元素的符号。

这是我的尝试,但这样只会改变负面元素的符号:

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))

7 个答案:

答案 0 :(得分:2)

使用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]]

答案 1 :(得分:0)

试试这个:

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]);

答案 2 :(得分:0)

非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]]

答案 3 :(得分:0)

您可以使用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

答案 4 :(得分:0)

我想到的最简单的方法:

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]]

答案 5 :(得分:0)

检查所有行是否包含负数的好方法(假设您的矩阵至少为1x1,而不是空):

   max(map(min, matrix)) < 0

总的来说:

if max(map(min, matrix)) < 0:
    matrix[:] = [[-x for x in row] for row in matrix]

答案 6 :(得分:-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)