Python 需要一些初学者语法的帮助
Python need for help for some beginner 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])
究竟是什么?
这在 python 中称为 list comprehension。行
Nx = np.array([(x < x_i).sum() for x_i in x]) / float(n)
本质上是 short-hand for
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
数组,您可以使用常用的比较运算符执行 element-wise 比较。在每次迭代中,我们有数组 x
和 x_i
,一个标量,是数组的第 i
个元素。
(x < x_i)
对 x
和 returns 的每个元素执行 element-wise 比较,每个元素是 True
或 False
取决于比较操作的结果。所以本质上我们有一个 new_array
个布尔值,这样第 p
个元素 new_array[p] = x[p] < x_i
.
.sum()
计算这个new_array
中所有元素的和。因为 True
计算为 1
而 False
计算为 0
,.sum()
returns [=20= 中 True
值的数量].这是另一种说法 returns “x
中小于 x_i
的元素数量”
- 现在这些值被列表理解放入列表中。所以
new_list[i]
将是数组 x
中小于 x[i]
. 的元素数
- 最后将this转为numpy数组,将this的每个元素除以
float(n)
,即x
. 中的元素个数
因此,Nx
是一个数组,使得 Nx
的第 i
个元素是 x
中小于 [=15] 的元素的百分比=] x
.
的第一个元素
只需 运行 终端中的每个部分,看看会发生什么。
首先,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
.
为了便于理解,让我们分解成更小的块
np.array([(x < x_i).sum() for x_i in x])
1.First部分
for x_i in x
represent each element in array x
第二部分
x < x_i
return 布尔值
例如:
x = np.array(range(1,9+1))
它创建一个数组[1,2,3,4,5,6,7,8,9]
那么假设我把xi当成9,
(x < 9)
returns 一个布尔值数组
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 中
让我们先打破np.array([(x < x_i).sum() for x_i in x])
。
(x < x_i)
:是一个布尔表达式,表示其结果为假(或 0)或真(或 1)。
(x < x_i).sum()
:会给你列表的总和。
示例:假设 x =array[1,2,3]
\
- 第一种情况是
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
\
- 第二种情况是
x_i = 2
,so so (x < x_i)会给你array([ True, False, False])
所以sum(true,false,false) = sum(1,0,0) = 1
\
- 第三种情况你会发现 sum(true,true,false) = sum(1,1,0) = 2\
因此,Nx = array([0,1,2])
我刚开始 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])
究竟是什么?
这在 python 中称为 list comprehension。行
Nx = np.array([(x < x_i).sum() for x_i in x]) / float(n)
本质上是 short-hand for
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
数组,您可以使用常用的比较运算符执行 element-wise 比较。在每次迭代中,我们有数组 x
和 x_i
,一个标量,是数组的第 i
个元素。
(x < x_i)
对x
和 returns 的每个元素执行 element-wise 比较,每个元素是True
或False
取决于比较操作的结果。所以本质上我们有一个new_array
个布尔值,这样第p
个元素new_array[p] = x[p] < x_i
..sum()
计算这个new_array
中所有元素的和。因为True
计算为1
而False
计算为0
,.sum()
returns [=20= 中True
值的数量].这是另一种说法 returns “x
中小于x_i
的元素数量”- 现在这些值被列表理解放入列表中。所以
new_list[i]
将是数组x
中小于x[i]
. 的元素数
- 最后将this转为numpy数组,将this的每个元素除以
float(n)
,即x
. 中的元素个数
因此,Nx
是一个数组,使得 Nx
的第 i
个元素是 x
中小于 [=15] 的元素的百分比=] x
.
只需 运行 终端中的每个部分,看看会发生什么。
首先,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
.
为了便于理解,让我们分解成更小的块
np.array([(x < x_i).sum() for x_i in x])
1.First部分
for x_i in x
represent each element in array x
第二部分
x < x_i
return 布尔值
例如:
x = np.array(range(1,9+1))
它创建一个数组[1,2,3,4,5,6,7,8,9]
那么假设我把xi当成9,
(x < 9)
returns 一个布尔值数组
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 中
让我们先打破np.array([(x < x_i).sum() for x_i in x])
。
(x < x_i)
:是一个布尔表达式,表示其结果为假(或 0)或真(或 1)。
(x < x_i).sum()
:会给你列表的总和。
示例:假设 x =array[1,2,3]
\
- 第一种情况是
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
\ - 第二种情况是
x_i = 2
,so so (x < x_i)会给你array([ True, False, False])
所以sum(true,false,false) = sum(1,0,0) = 1
\ - 第三种情况你会发现 sum(true,true,false) = sum(1,1,0) = 2\
因此,Nx = array([0,1,2])