Python: 语法似乎是对数组求幂?帮我解释一下?
Python: Syntax appears to be exponentiating an array? Help me interpret?
我正在尝试破译一些复杂的代码。下面,我简化了我所理解的代码,以触及我的问题的核心。
scales = (2**arange(8, 12, .25)).astype(int)
在我看来,arange()
创建了一个值数组,范围从 8 到 11,值相差 0.25。
但是 2**arange
是做什么的呢?我知道 **
用于求幂,但对我来说,可以对数组求幂是没有意义的!当然,对数组内的值求幂是有意义的。但这似乎是非常奇怪的语法!
arange
returns一个numpy
数组,支持向量化运算
例如2 ** [1 2 3]
returns[2 4 8]
,就像2 + [1 2 3]
returns[3 4 5]
.
Numpy 数组让您可以将数字运算符应用于数组中的所有元素。所以 array * 3
会将乘法应用于数组中的所有元素,生成一个包含结果的新数组。您可以在此类表达式的 任一侧 使用数组;毕竟,并非所有运算符都是 commutative.
使用 2 ** array
简单地将数组中的每个元素应用为 2 的指数,生成具有 2 ** <input item>
计算的数组:
>>> arange(8, 12, .25)
array([ 8. , 8.25, 8.5 , 8.75, 9. , 9.25, 9.5 , 9.75,
10. , 10.25, 10.5 , 10.75, 11. , 11.25, 11.5 , 11.75])
>>> 2**arange(8, 12, .25)
array([ 256. , 304.43702144, 362.03867197, 430.53896461,
512. , 608.87404288, 724.07734394, 861.07792922,
1024. , 1217.74808576, 1448.15468787, 1722.15585844,
2048. , 2435.49617153, 2896.30937574, 3444.31171688])
所以输入是8
、8.25
、8.5
等数组,结果数组包含2 ** 8
、[=19]的结果=]、2 ** 8.5
,依此类推。
array.astype(int)
操作然后计算结果:
>>> (2 ** arange(8, 12, .25)).astype(int)
array([ 256, 304, 362, 430, 512, 608, 724, 861, 1024, 1217, 1448,
1722, 2048, 2435, 2896, 3444])
Python 中的每个类型都可以实现 methods that are the backing methods for various Python operators or operations。具体来说,在这种情况下,由于运算符和操作数(分别为 **
和 int().__pow__(numpy.arange())
之前已返回 NotImplementedError
),调用了 numpy.arange().__rpow__(int())
。这不仅允许定义对新类型的操作,还允许定义不知道如何处理新类型操作数的现有类型。
我正在尝试破译一些复杂的代码。下面,我简化了我所理解的代码,以触及我的问题的核心。
scales = (2**arange(8, 12, .25)).astype(int)
在我看来,arange()
创建了一个值数组,范围从 8 到 11,值相差 0.25。
但是 2**arange
是做什么的呢?我知道 **
用于求幂,但对我来说,可以对数组求幂是没有意义的!当然,对数组内的值求幂是有意义的。但这似乎是非常奇怪的语法!
arange
returns一个numpy
数组,支持向量化运算
例如2 ** [1 2 3]
returns[2 4 8]
,就像2 + [1 2 3]
returns[3 4 5]
.
Numpy 数组让您可以将数字运算符应用于数组中的所有元素。所以 array * 3
会将乘法应用于数组中的所有元素,生成一个包含结果的新数组。您可以在此类表达式的 任一侧 使用数组;毕竟,并非所有运算符都是 commutative.
使用 2 ** array
简单地将数组中的每个元素应用为 2 的指数,生成具有 2 ** <input item>
计算的数组:
>>> arange(8, 12, .25)
array([ 8. , 8.25, 8.5 , 8.75, 9. , 9.25, 9.5 , 9.75,
10. , 10.25, 10.5 , 10.75, 11. , 11.25, 11.5 , 11.75])
>>> 2**arange(8, 12, .25)
array([ 256. , 304.43702144, 362.03867197, 430.53896461,
512. , 608.87404288, 724.07734394, 861.07792922,
1024. , 1217.74808576, 1448.15468787, 1722.15585844,
2048. , 2435.49617153, 2896.30937574, 3444.31171688])
所以输入是8
、8.25
、8.5
等数组,结果数组包含2 ** 8
、[=19]的结果=]、2 ** 8.5
,依此类推。
array.astype(int)
操作然后计算结果:
>>> (2 ** arange(8, 12, .25)).astype(int)
array([ 256, 304, 362, 430, 512, 608, 724, 861, 1024, 1217, 1448,
1722, 2048, 2435, 2896, 3444])
Python 中的每个类型都可以实现 methods that are the backing methods for various Python operators or operations。具体来说,在这种情况下,由于运算符和操作数(分别为 **
和 int().__pow__(numpy.arange())
之前已返回 NotImplementedError
),调用了 numpy.arange().__rpow__(int())
。这不仅允许定义对新类型的操作,还允许定义不知道如何处理新类型操作数的现有类型。