【问题标题】:function `any()` applied to several arrays rather than just one函数 `any()` 应用于多个数组,而不仅仅是一个
【发布时间】:2020-11-07 18:32:49
【问题描述】:

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

如果我将any() 与向量一起使用,当然只要任何元素返回True,它就会返回True(或1):

import numpy as np

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

现在假设我有一个矩阵。如果我想获得一个带有10 的向量,具体取决于矩阵的每个元素在单独使用时是否会返回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 扩展到矩阵输入,从而返回一个包含多个10 的向量?

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

【问题讨论】:

  • 请提供一些预期的输入/输出,因为您的目标不是很明确。 any 没有“应用于”任何东西,也没有返回向量。它仅返回TrueFalse 提供的可迭代元素中的元素是否真实
  • 如果您想要的只是一行 1,如果该行中的任何元素是真实的,那么 np.where 可能会有所帮助。
  • @DeepSpace TY。是的,我想获得与我所写内容相同的输出,但不使用for 循环。可能np.where 确实是答案。

标签: python numpy boolean numpy-ndarray


【解决方案1】:
numpy.any(matrix, axis=1)

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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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]
    

    【讨论】:

    • 您在错误的轴上工作 - 您只是没有注意到,因为 axis=0axis=1 恰好为此数组产生了相同的结果。
    猜你喜欢
    • 1970-01-01
    • 2019-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多