函数 `any()` 应用于多个数组,而不仅仅是一个

function `any()` applied to several arrays rather than just one

我想同时将函数 any() 应用于矩阵的所有行。

如果我将 any() 与向量一起使用,当然,只要任何元素 return True:

import numpy as np

print any(np.array([0,0,0,1]))*1

现在假设我有一个矩阵。如果我想获得一个带有 10 的向量,具体取决于矩阵的每个元素单独使用时是否会 return True,我可以使用 for循环:

matrix=np.array([[0,0,0],[0,0,1],[0,1,0]])
result=np.zeros(len(matrix)).astype('int')
i=0
for line in matrix:
    result[i]=any(matrix[i])
    i+=1
    

print result

不过这个方法好像不太实用,因为矩阵的元素会用for循环一次处理一次。有没有更好的方法将 any 扩展到矩阵输入,这样 return 就是上面几个 10 的向量?

请注意,我不想使用 matrix.any(),因为它只会 return 单个 TrueFalse 语句,而我希望它应用于矩阵的每个单独元素。

你可以这样做:

import numpy as np

matrix = np.array([[0, 0, 0], [0, 0, 1], [0, 1, 0]])
matrix_sums = np.sum(matrix, axis=1)
are_truthy_matrix_sums = matrix_sums > 0

print are_truthy_matrix_sums

我们使用 np.sum 将矩阵简化为具有总和的一维数组,然后将这些总和与 0 进行比较,以查看这些行中是否存在任何真值。

这会打印:

[False  True  True]
numpy.any(matrix, axis=1)

numpy.any 已经有你想要的功能。