gpt4 book ai didi

python - 遍历 NumPy 数组行/列并修改值

转载 作者:太空宇宙 更新时间:2023-11-04 02:50:29 26 4
gpt4 key购买 nike

A = np.array([[1,2,3], [4,5,6], [7,8,0]]) 
for x in A[1,:]:
if x < failure_tolerance:
x = 0

这显然行不通,因为可写性发生了一些变化,但我不能支持它。

最佳答案

问题是这里只有x被改变了。 x 引用数组中的特定单元格,它包含对数组中元素的引用(但不是包含元素的单元格)。

尽管如此,当您想对批量矩阵执行计算时,通常会使用 numpy 结构:

A = np.array([[1,2,3], [4,5,6], [7,8,0]]) 
A[1,<b>A[1,:] < failure_tolerance</b>] = 0

在这里A[1,:] < failure_tolerance将构造一个小于 failure_tolerance 的值的掩码.接下来我们设置 0 A 中的所有这些值.

例如(使用 failure_tolerance = 5 ):

>>> failure_tolerance = 5
>>> A[1,A[1,:] < failure_tolerance] = 0
>>> A
array([[1, 2, 3],
[0, 5, 6],
[7, 8, 0]])

如您所见,第二行的第一个元素 ( 4 ) 现在已替换为 0因为它小于 5 .

通常当您使用 numpy 执行调用时,它会运行得更快,因为 numpy 不在 Python 中执行这些调用,而是在 C 中使用高性能数据结构和算法。对于(非常)小的矩阵,不会有任何区别(由于调用开销,numpy 可能会花费更长的时间),但是如果您处理巨大的矩阵,numpy 肯定会胜过用 Python 编写的任何解决方案。

此外,这种语法非常具有声明性:训练有素的 numpy 开发人员会立即理解您设置的值小于 failure_tolerance .

编辑:

如果您需要多个条件,可以使用 |作为逻辑或和 &作为逻辑与。例如:

A = np.array([[1,2,3], [4,5,6], [7,8,0]]) 
A[1,(A[1,:] < failure_tolerance)<b> & (A[1,:] > at_least_value)</b>] = 0

这将设置 A第二行的所有值至 0鉴于这些值介于 at_least_value 之间和 failure_tolerance .

关于python - 遍历 NumPy 数组行/列并修改值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44043441/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com