Python需要一些初学者语法的帮助

时间:2020-09-22 21:50:14

标签: python numpy syntax

我刚开始使用python,但有以下两行我不理解。

x = np.array(range(1,n+1))
Nx = np.array([(x < x_i).sum() for x_i in x]) / float(n)

更具体地说,我不明白

np.array([(x < x_i).sum() for x_i in x])

是吗?

4 个答案:

答案 0 :(得分:1)

这在python中称为list comprehension。线

Nx = np.array([(x < x_i).sum() for x_i in x]) / float(n)

本质上是

的简写
new_list = []
for x_i in x:
    new_elem = (x < x_i).sum()
    new_list.append(new_elem)

Nx = np.array(new_list) / float(n)

我认为for循环使理解列表理解功能变得相当简单。使用调试器来逐步检查代码,如果您在理解循环时遇到困难,请查看每一行的作用。

现在让我们打开每个零件的包装。

使用numpy数组,可以使用常规比较运算符执行逐元素比较。在每次迭代中,我们都有一个数组x和一个x_i(一个标量)是数组的第i个元素。

  • (x < x_i)x的每个元素执行逐元素比较,并根据比较结果返回一个新数组,其中每个元素为TrueFalse操作。因此,从本质上讲,我们有一个new_array的布尔值,因此第p个元素new_array[p] = x[p] < x_i
  • .sum()计算该new_array中所有元素的总和。由于True的值为1,而False的值为0,因此.sum()返回Truenew_array个值的数量。换句话说,它返回“ x中小于x_i的元素数”
  • 现在,这些值将通过列表理解放入列表中。因此new_list[i]将是数组x中少于x[i]的元素的数量。
  • 最后,将其转换为一个numpy数组,并将其每个元素除以float(n),即x中元素的数量。

因此,Nx是一个数组,使得i的第Nx个元素是x的元素少于i的百分比x的第th个元素。

答案 1 :(得分:1)

只需在终端机中运行每一块,看看会发生什么。

首先,创建x数组

n = 5 # I added this such that n is defined
x = np.array(range(1,n+1))

这将导致array([1, 2, 3, 4, 5])数组。但是请注意,您应该改用np.arange(1, n+1)

现在让我们看第二行。 np.array的参数为[(x < x_i).sum() for x_i in x]。这是列表理解。创建列表是一种不错的语法。我们可以像对“ x_i列表中的每个元素x读入(x < x_i).sum()来理解它。但是(x < x_i).sum()是什么?我们知道x_i是一个元素,而x是数组[1, 2, 3, 4, 5]。当您将NumPy数组与这样的元素进行比较时,您会得到一个包含“ True”和“ False”的布尔数组,然后sum()将对元素求和(基本计算“ True”的数量),然后将列表理解的结果转换为另一个数组,然后将其元素除以n

答案 2 :(得分:1)

为了便于理解,让我们分成较小的块

np.array([(x < x_i).sum() for x_i in x])

1。第一部分

for x_i in x 

表示数组x中的每个元素

第二部分

x < x_i

返回boolena值

例如:

x = np.array(range(1,9+1))

它创建一个数组[1,2,3,4,5,6,7,8,9]

那我们假设xi为9,

(x < 9)

返回布尔值数组

array([ True,  True,  True,  True,  True,  True,  True,  True, False])

第三部分

(x < x_i).sum()

求和所有真值,所以当xi = 9时,求和为8

第四部分

np.array([(x < x_i).sum() for x_i in x])

它将所有值存储在Nx数组中

答案 3 :(得分:0)

让我们第一个崩溃np.array([(x < x_i).sum() for x_i in x])
(x < x_i):是布尔表达式,表示其结果为false(或0)或true(或1)。
(x < x_i).sum():将为您提供列表的总和。
示例:假设x =array[1,2,3] \

  1. 第一种情况是x_i = 1,所以(x array([false,false,false]),因为x_i = 0 > 0 false x_i = 0> 1是< strong> false ,最后一个x_i = 0 > 2 false
    sum(false,false,false) = sum(0,0,0) = 0 \
  2. 第二种情况是x_i = 2,因此(x array([ True, False, False]),因此sum(true,false,false) = sum(1,0,0) = 1 \
  3. 第三种情况下,您会发现sum(true,true,false)= sum(1,1,0)= 2 \

因此,Nx = array([0,1,2])