我刚开始使用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])
型到底是什么
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数组,可以使用常用的比较运算符执行元素比较。在每次迭代中,我们有数组x和x_i,一个标量,是数组的第i个元素。
numpy
x
x_i
i
(x < x_i)
True
False
new_array
p
new_array[p] = x[p] < x_i
.sum()
1
0
new_list[i]
x[i]
float(n)
因此,Nx是一个数组,使得Nx的第i个元素是x中小于x的第i个元素的元素的百分比。
Nx
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。
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).sum()
[1, 2, 3, 4, 5]
sum()
n
30byixjq3#
为了便于理解,让我们分成几个小块
字符串
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])
型
第三部分
型对所有真值求和,因此当xi =9时,sum为8
第四部分
型它将所有值存储在数组Nx中
cpjpxq1n4#
我们先来分解一下
字符串(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 > 0是false,x_i = 0> 1是false,最后一个x_i = 0 > 2是false,sum(false,false,false) = sum(0,0,0) = 01.第二种情况是x_i = 2,所以so(x < x_i)会给予array([ True, False, False]),所以sum(true,false,false) = sum(1,0,0) = 11.第三种情况是sum(true,true,false)= sum(1,1,0)= 2因此,Nx = array([0,1,2])
x = array[1,2,3]
x_i = 1
array([false,false,false])
x_i = 0 > 0
x_i = 0> 1
x_i = 0 > 2
sum(false,false,false) = sum(0,0,0) = 0
x_i = 2
array([ True, False, False])
sum(true,false,false) = sum(1,0,0) = 1
Nx = array([0,1,2])
4条答案
按热度按时间bbmckpt71#
这在python中称为list comprehension。这条线
字符串
基本上是速记
型
我认为for循环使理解列表理解的作用变得相当简单。如果您在理解循环时遇到困难,请使用调试器单步调试代码,并查看每行的作用。
现在,我们来了解一下每个部分的功能。
对于
numpy
数组,可以使用常用的比较运算符执行元素比较。在每次迭代中,我们有数组x
和x_i
,一个标量,是数组的第i
个元素。(x < x_i)
对x
的每个元素执行逐元素比较,并根据比较操作的结果返回一个新的数组,其中每个元素为True
或False
。所以本质上我们有一个new_array
的布尔值,使得p
的第一个元素new_array[p] = x[p] < x_i
。.sum()
计算此new_array
中所有元素的总和。由于True
的计算结果为1
,而False
的计算结果为0
,因此.sum()
将返回new_array
中True
值的个数。也就是说,它返回“x
中小于x_i
的元素的个数“new_list[i]
将是数组x
中小于x[i]
的元素的数目。float(n)
,即x
中的元素数。因此,
Nx
是一个数组,使得Nx
的第i
个元素是x
中小于x
的第i
个元素的元素的百分比。vpfxa7rd2#
只要在终端中运行每一段,看看会发生什么。
首先,使用以下命令创建
x
数组字符串
这将产生
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
。30byixjq3#
为了便于理解,让我们分成几个小块
字符串
1.第一部分
型
表示数组x中的每个元素
第二部分
型
返回布尔值
例如:
型
它创建一个数组[1,2,3,4,5,6,7,8,9]
那么假设我取xi为9
型
返回布尔值数组
型
第三部分
型
对所有真值求和,因此当xi =9时,sum为8
第四部分
型
它将所有值存储在数组Nx中
cpjpxq1n4#
我们先来分解一下
字符串
(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 > 0
是false,x_i = 0> 1
是false,最后一个x_i = 0 > 2
是false,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])