python - 你可以在 Python 中的数组的大括号内使用 if-else 语句吗?

标签 python arrays if-statement numpy

我想知道是否有一种很好的方法可以在 Python 中的数组的大括号内使用 if-else 语句来赋值。我想要的是这样的:

A = #some 2D array of length m by n, already initialized
A = np.float64(A)
val = someValue #any number, pick a number

A = [[val for j in range(n) if A[i][j] < val, else A[i][j]=A[i][j]] for i in range(m)]

有什么好的方法吗?或者,如果 numpy 有更快的计算方法,那即使不是更好,也同样好。

做我想要实现的目标的较长方法是

for i in range(m):
    for j in range(n):
        if A[i][j] < val:
            A[i][j] = val

所需的输出是将低于阈值的任何值设置为该阈值。我可以用一维数组做更简单的 if 语句,例如

myArray = [otherArray[i] for i in range(theRange) if otherArray[i]>=value and otherArray[i]<=anotherValue]

这个一维示例不是我想要的。这只是我正在寻找的编码 block 类型的一个示例。它似乎比传统的 if-else 语句处理得更快。

最佳答案

对于 numpy 数组,我们尽量避免迭代(列表理解)。有时需要,但在这种情况下不需要:

In [403]: A=np.arange(16).reshape(4,4)    
In [404]: A1=A.astype(np.float64)    # better syntax for converting to float

In [405]: A1
Out[405]: 
array([[  0.,   1.,   2.,   3.],
       [  4.,   5.,   6.,   7.],
       [  8.,   9.,  10.,  11.],
       [ 12.,  13.,  14.,  15.]])

显示测试为真/假的 bool 数组:

In [406]: A1<5 
Out[406]: 
array([[ True,  True,  True,  True],
       [ True, False, False, False],
       [False, False, False, False],
       [False, False, False, False]], dtype=bool)

我们可以用这样的掩码进行索引:

In [407]: A1[A1<5]=5

In [408]: A1
Out[408]: 
array([[  5.,   5.,   5.,   5.],
       [  5.,   5.,   6.,   7.],
       [  8.,   9.,  10.,  11.],
       [ 12.,  13.,  14.,  15.]])

np.where(和 np.nonzero)返回条件为 True 的索引; where 有一个类似于三元运算符的版本(在每个元素上):

In [410]: np.where(A<5,5,A)
Out[410]: 
array([[ 5,  5,  5,  5],
       [ 5,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

我们也可以用np.maximumclip:

In [411]: np.maximum(A,5)
Out[411]: 
array([[ 5,  5,  5,  5],
       [ 5,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

In [417]: A.clip(5,None)
Out[417]: 
array([[ 5,  5,  5,  5],
       [ 5,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])

关于python - 你可以在 Python 中的数组的大括号内使用 if-else 语句吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38059796/

相关文章:

c# - 如何使用python .Net与ZeroMQ或其他将Python包公开给C#

python - Numpy:如何使用 argmax 结果来获得实际最大值?

python - 根据内容对同一目录中的文件进行分组

C++, bool 数组未正确初始化

C++:如何从数组生成随机数

excel - 基于先前结果的条件结果

php - 使用 IF 语句和 && 逻辑表达式的最佳方法

如果加入 SQLite 棘手

Python 条件与正则表达式

arrays - 类型 'SNstorelocation' 没有下标成员 - 我只是不明白