我刚开始使用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])
是吗?
答案 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
的每个元素执行逐元素比较,并根据比较结果返回一个新数组,其中每个元素为True
或False
操作。因此,从本质上讲,我们有一个new_array
的布尔值,因此第p
个元素new_array[p] = x[p] < x_i
。.sum()
计算该new_array
中所有元素的总和。由于True
的值为1
,而False
的值为0
,因此.sum()
返回True
中new_array
个值的数量。换句话说,它返回“ x
中小于x_i
的元素数” new_list[i]
将是数组x
中少于x[i]
的元素的数量。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]
\
x_i = 1
,所以(x 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
\ x_i = 2
,因此(x sum(true,false,false) = sum(1,0,0) = 1
\ 因此,Nx = array([0,1,2])