import numpy as np
f = lambda m, n: n + 10 * m
A = np.fromfunction(f, (6, 6), dtype=int)
print(A)
运行结果:
解析:
f = lambda m, n: n + 10 * m
m, n 是lambda的两个参数,冒号后面 n + 10 * m 是返回值
A = np.fromfunction(f, (6, 6), dtype=int)
参数(6, 6)表示 m 的取值范围是[0, 1, 2, 3, 4, 5], n的取值范围是[0, 1, 2, 3, 4, 5]
数组A反应的是 m, n分别取值范围从 [0, 1, 2, 3, 4, 5] 时,n + 10 * m的值
把m和n代入 n + 10 * m,可得下列数组:
[[ 0 1 2 3 4 5]
[10 11 12 13 14 15]
[20 21 22 23 24 25]
[30 31 32 33 34 35]
[40 41 42 43 44 45]
[50 51 52 53 54 55]]
用excel做个表格看着更明显:
举例1:
import numpy as np
def func(i):
return i * 2
a = np.fromfunction(func, (5,), dtype=int)
print(a)
使用 fromfunction() 函数,创建一个数组 a,看 a 返回的的结果,所以a中存储的就是 i * 2 的值,而 i 其实就是数组的索引,数组 a 反应的是 i 取值从0到1时,i * 2的值。fromfunction的第二个参数定义了数组的形状,也就是说参数(5,)表示 i 取值范围是[0,1,2,3,4]
所以 i * 2 的值就是[0, 2, 4, 6, 8]
举例2:
假如要创建的是二维数组,也就是说函数有变量
import numpy as np
def func2(i, j):
return i * j
B = np.fromfunction(func2, (10, 10), dtype=int)
print(B)
参数(10, 10)表示 i 的取值范围是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], j 的取值范围是 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
数组B反应的是 i, j分别取值范围从 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 时,i * j 的值
把 i 和 j 的值代入到 i * j,得到如下数组:
[[ 0 0 0 0 0 0 0 0 0 0]
[ 0 1 2 3 4 5 6 7 8 9]
[ 0 2 4 6 8 10 12 14 16 18]
[ 0 3 6 9 12 15 18 21 24 27]
[ 0 4 8 12 16 20 24 28 32 36]
[ 0 5 10 15 20 25 30 35 40 45]
[ 0 6 12 18 24 30 36 42 48 54]
[ 0 7 14 21 28 35 42 49 56 63]
[ 0 8 16 24 32 40 48 56 64 72]
[ 0 9 18 27 36 45 54 63 72 81]]