小编Inf*_*iff的帖子

条件列表理解

我试图更好地了解列表理解的工作原理。我有以下函数,如果数字是素数,则返回true或false(我在论坛上的某个地方找到了,但不记得在哪里):

import math

def is_prime(n):
    if n % 2 == 0 and n > 2: 
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

如果我运行:

[x for x in range(2, num) if is_prime(x)]
Run Code Online (Sandbox Code Playgroud)

我得到理想的结果

[2, 3, 5, 7, 11, 13, 17, 19]
Run Code Online (Sandbox Code Playgroud)

在尝试将整个函数转换为列表理解时,我想到了:

[x if not (x%2==0 and x > 2) else x for x in range (2, num) 
     for i in range(3, int(x**(1/2))+1, 2) if not (x%i==0)]
Run Code Online (Sandbox Code Playgroud)

产生: …

python list-comprehension

7
推荐指数
1
解决办法
8996
查看次数

numpy:有条件的总和

我有以下numpy数组:

import numpy as np
arr = np.array([[1,2,3,4,2000],
                [5,6,7,8,2000],
                [9,0,1,2,2001],
                [3,4,5,6,2001],
                [7,8,9,0,2002],
                [1,2,3,4,2002],
                [5,6,7,8,2003],
                [9,0,1,2,2003]
              ])
Run Code Online (Sandbox Code Playgroud)

我知道np.sum(arr, axis=0)可以提供以下结果:

array([   40,    28,    36,    34, 16012])
Run Code Online (Sandbox Code Playgroud)

我想做的(没有for循环)是根据最后一列的值对各列求和,以便提供的结果是:

array([[   6,    8,   10,   12, 4000],
       [  12,    4,    6,    8, 4002],
       [   8,   10,   12,    4, 4004],
       [  14,    6,    8,   10, 4006]])
Run Code Online (Sandbox Code Playgroud)

我意识到这可能是一个无循环的尝试,但希望能做到最好……

如果必须使用for循环,那将如何工作?

我试过了np.sum(arr[:, 4]==2000, axis=0)(我会2000用for循环中的变量代替),但是结果是2

python arrays numpy sum

6
推荐指数
1
解决办法
4990
查看次数

标签 统计

python ×2

arrays ×1

list-comprehension ×1

numpy ×1

sum ×1