迭代地将函数应用于数组
Iteratively apply a function to an array
我想创建一个数组,其中包含 g^0、g^1、g^2.... 最多 g^100,但全部为 mod50(抱歉,如果有人知道如何格式化它,那么权力是正确对齐我需要一些帮助!)
在我的例子中 g = 23,所以我想要一个如下所示的数组:
[1,23,29,17...]
为了便于理解,我在底部包含了所有(不正确的)代码。我创建了一个包含 201 个项目的空数组。然后我尝试创建一个循环,它最初采用 i=0,然后当我们遍历数组的每个元素时,将 i 的新值作为 x 的幂。我不知道这是否只是我犯了错误的代码,或者我需要用不同的逻辑来解决这个问题,但无论如何,我们将不胜感激!
n = 101
array = [0] * n
g = 23
i = 0
for i in array:
if i<100:
x = g**i
print(x%50)
i = i + 1
array
这是我从这段代码得到的输出:
[1,1,1,1,1...]
下面已经回答了这个最初的问题
我想知道是否可以应用相同的逻辑,而不是 g^i 作为所需的输出,它将是 h(g^(-in)) 且 h = 20、n = 18 和 g = 23像之前一样。我已经试过了,但在我的数组中得到了不正确的值,我试过的代码:
h = 20
n = 18
g = 23
array2 = [h*(g**((-i)*n))%500 for i in range(100+1)]
IIUC,你可以使用列表理解:
g = 23
out = [g**i%50 for i in range(100+1)]
输出:
[1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1]
或者更好,使用 numpy:
import numpy as np
a = 23**np.arange(100+1)%50
输出:
array([ 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 43, 33, 49,
17, 13, 29, 47, 15, 41, 15, 19, 13, 21, 9, 39, 9, 25, 25, 9, 1,
1, 29, 1, 27, 25, 9, 17, 39, 13, 39, 47, 33, 11, 39, 43, 33, 21,
5, 31, 29, 19, 9, 25, 43, 5, 21, 13, 33, 49, 43, 9, 29, 29, 49,
33, 15, 21, 11, 3, 37, 7, 7, 41, 27, 31, 33, 37, 39, 45, 17, 45,
29, 19, 43, 23, 13, 49, 17, 7, 43, 19, 33, 29, 35, 15, 35, 9])
为什么你的代码失败
您没有对数组做任何事情,只是将其用作 0 的生成器。所以条件 i < 100
总是 True 并且 x 总是 1。你的 i = i+1
在每个循环中被 0 覆盖。
我想创建一个数组,其中包含 g^0、g^1、g^2.... 最多 g^100,但全部为 mod50(抱歉,如果有人知道如何格式化它,那么权力是正确对齐我需要一些帮助!)
在我的例子中 g = 23,所以我想要一个如下所示的数组:
[1,23,29,17...]
为了便于理解,我在底部包含了所有(不正确的)代码。我创建了一个包含 201 个项目的空数组。然后我尝试创建一个循环,它最初采用 i=0,然后当我们遍历数组的每个元素时,将 i 的新值作为 x 的幂。我不知道这是否只是我犯了错误的代码,或者我需要用不同的逻辑来解决这个问题,但无论如何,我们将不胜感激!
n = 101
array = [0] * n
g = 23
i = 0
for i in array:
if i<100:
x = g**i
print(x%50)
i = i + 1
array
这是我从这段代码得到的输出:
[1,1,1,1,1...]
下面已经回答了这个最初的问题
我想知道是否可以应用相同的逻辑,而不是 g^i 作为所需的输出,它将是 h(g^(-in)) 且 h = 20、n = 18 和 g = 23像之前一样。我已经试过了,但在我的数组中得到了不正确的值,我试过的代码:
h = 20
n = 18
g = 23
array2 = [h*(g**((-i)*n))%500 for i in range(100+1)]
IIUC,你可以使用列表理解:
g = 23
out = [g**i%50 for i in range(100+1)]
输出:
[1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 9, 7, 11, 3, 19, 37, 1]
或者更好,使用 numpy:
import numpy as np
a = 23**np.arange(100+1)%50
输出:
array([ 1, 23, 29, 17, 41, 43, 39, 47, 31, 13, 49, 27, 21, 33, 43, 33, 49,
17, 13, 29, 47, 15, 41, 15, 19, 13, 21, 9, 39, 9, 25, 25, 9, 1,
1, 29, 1, 27, 25, 9, 17, 39, 13, 39, 47, 33, 11, 39, 43, 33, 21,
5, 31, 29, 19, 9, 25, 43, 5, 21, 13, 33, 49, 43, 9, 29, 29, 49,
33, 15, 21, 11, 3, 37, 7, 7, 41, 27, 31, 33, 37, 39, 45, 17, 45,
29, 19, 43, 23, 13, 49, 17, 7, 43, 19, 33, 29, 35, 15, 35, 9])
为什么你的代码失败
您没有对数组做任何事情,只是将其用作 0 的生成器。所以条件 i < 100
总是 True 并且 x 总是 1。你的 i = i+1
在每个循环中被 0 覆盖。