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

qeeaahzv  于 2023-08-05  发布在  Python
关注(0)|答案(4)|浏览(64)

我刚开始使用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])


到底是什么

bbmckpt7

bbmckpt71#

这在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数组,可以使用常用的比较运算符执行元素比较。在每次迭代中,我们有数组xx_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()将返回new_arrayTrue值的个数。也就是说,它返回“x中小于x_i的元素的个数“
  • 现在,这些值由列表解析放入列表中。所以new_list[i]将是数组x中小于x[i]的元素的数目。
  • 最后,将其转换为numpy数组,并将其中的每个元素除以float(n),即x中的元素数。

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

vpfxa7rd

vpfxa7rd2#

只要在终端中运行每一段,看看会发生什么。
首先,使用以下命令创建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中的每个元素x_i,计算(x < x_i).sum()。什么是(x < x_i).sum()?我们知道x_i是单个元素,而x是数组[1, 2, 3, 4, 5]。当你将NumPy数组与这样的元素进行比较时,你会得到一个包含“True”和“False”的布尔数组。然后sum()将对元素求和(基本上是计算“True”的数量)。这个列表解析的结果然后被转换成另一个数组,其元素然后除以n

30byixjq

30byixjq3#

为了便于理解,让我们分成几个小块

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

字符串

1.第一部分

for x_i in x


表示数组x中的每个元素

第二部分

x < x_i


返回布尔值
例如:

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时,sum为8

第四部分

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


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

cpjpxq1n

cpjpxq1n4#

我们先来分解一下

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 < x_i)会给予array([false,false,false]),因为x_i = 0 > 0falsex_i = 0> 1false,最后一个x_i = 0 > 2false
sum(false,false,false) = sum(0,0,0) = 0
1.第二种情况是x_i = 2,所以so(x < x_i)会给予array([ True, False, False]),所以sum(true,false,false) = sum(1,0,0) = 1
1.第三种情况是sum(true,true,false)= sum(1,1,0)= 2
因此,Nx = array([0,1,2])

相关问题