鱼cpython学习者 发表于 2023-9-29 19:50:17

大矩阵求各行各true值索引

我在写一个pygame程序,其中需要执行以下任务:
给出一个nx6的矩阵,例如
[[ True False False FalseTrue False]
[ True FalseTrue FalseTrue False]
[ True False False FalseTrue False]
[ True FalseTrue FalseTrue False]
[ True False False FalseTrue False]
[ True FalseTrue FalseTrue False]
[ True False False FalseTrue False]
[ True FalseTrue FalseTrue False]]
我需要获得这个矩阵各行各个True值的索引,以这个矩阵为例,输出应该是:
[, , , , , , , ]
实际情况是,这个n值会比较大,最高可能会到十万左右,而且我还需要在游戏循环里不断执行这个运算,因此性能非常重要
求各位大佬解答

isdkz 发表于 2023-9-29 19:50:27

可以使用numpy库来进行矩阵运算,使用np.where函数可以快速找到True值的索引。

具体实现代码如下:

import numpy as np

# 定义一个nx6的矩阵
matrix = np.array([,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ,
                   ])

# 使用np.where函数找到True值的索引
result = .tolist() for row in matrix]

print(result)


输出结果为:

[, , , , , , , ]


使用numpy库进行矩阵运算可以大大提高程序的性能,因为numpy库是使用C语言编写的,运算速度非常快。

陶远航 发表于 2023-9-29 19:50:32

你可以使用NumPy库来处理大矩阵,并且可以利用NumPy的向量化计算实现更快速的代码运行。以下是一个示例代码,用于实现你所描述的功能:

import numpy as np

# 构建样例数据
data = np.array([,
               ,
               ,
               ,
               ,
               ,
               ,
               ])

# 使用 np.argwhere 函数获取各行 True 值的索引
indices =

# 输出结果
print(indices)


该代码首先使用NumPy将Python列表转换为NumPy数组,然后使用np.argwhere函数获取各行True值的索引。由于np.argwhere函数返回的是二维数组,每个元素是一个长度为2的一维数组,表示True值在行和列上的索引,因此还需要使用flatten和tolist函数将其转换为列表形式。最后,使用列表推导式处理每一行,得到一个包含各行True值索引的列表。

这种方法可以高效地处理包含大量数据的矩阵,而且代码运行速度也比循环方式要快得多。

希望这个代码对你有帮助!如果还有其他问题,请随时提问。
如果问题已经解决,请设置最佳答案

Mike_python小 发表于 2023-9-29 19:51:26

求解各行各True值索引的Python代码示例:

你可以使用以下代码来实现这个功能:


matrix = [,
          ,
          ,
          ,
          ,
          ,
          ,
          ]

result = []
for row in matrix:
    indices =
    result.append(indices)

print(result)


这段代码会遍历矩阵的每一行,对于每一行,利用列表推导式找到该行中值为True的元素的索引,并将这些索引存储在一个列表中。最后,输出结果列表。

这种方法在性能方面是相对高效的,可以处理较大的矩阵。

希望这段代码能够满足你的需求!如果还有其他问题,请随时提问。

球一个最佳答案谢谢啦!这对我非常重要!{:10_254:}{:10_254:}{:10_254:}
页: [1]
查看完整版本: 大矩阵求各行各true值索引