Pet*_*ete 5 python numpy matrix
如何创建一个numpy矩阵,其元素是其索引的函数?例如,乘法表:a[i,j] = i*j
Un-numpy和un-pythonic将创建一个零数组然后循环.
毫无疑问,有一种更好的方法可以做到这一点,没有循环.
然而,更好的是直接创建矩阵.
这是一种方法:
>>> indices = numpy.indices((5, 5))
>>> a = indices[0] * indices[1]
>>> a
array([[ 0, 0, 0, 0, 0],
[ 0, 1, 2, 3, 4],
[ 0, 2, 4, 6, 8],
[ 0, 3, 6, 9, 12],
[ 0, 4, 8, 12, 16]])
Run Code Online (Sandbox Code Playgroud)
为了进一步说明,numpy.indices((5, 5))
生成两个包含5x5数组的x和y索引的数组,如下所示:
>>> numpy.indices((5, 5))
array([[[0, 0, 0, 0, 0],
[1, 1, 1, 1, 1],
[2, 2, 2, 2, 2],
[3, 3, 3, 3, 3],
[4, 4, 4, 4, 4]],
[[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4],
[0, 1, 2, 3, 4]]])
Run Code Online (Sandbox Code Playgroud)
当你将这两个数组相乘时,numpy将每个位置的两个数组的值相乘并返回结果.
一个通用的解决方案是使用np.fromfunction()
从文档:
numpy.fromfunction(function, shape, **kwargs)
通过在每个坐标上执行一个函数来构造一个数组。因此,所得数组在坐标(x,y,z)处具有值fn(x,y,z)。
下一行应提供所需的矩阵。
numpy.fromfunction(lambda i, j: i*j, (5,5))
输出:
array([[ 0., 0., 0., 0., 0.],
[ 0., 1., 2., 3., 4.],
[ 0., 2., 4., 6., 8.],
[ 0., 3., 6., 9., 12.],
[ 0., 4., 8., 12., 16.]])
Run Code Online (Sandbox Code Playgroud)
函数的第一个参数是可调用的,可为每个坐标执行。如果foo
是您作为第一个参数传递的函数,foo(i,j)
则将是的值(i,j)
。这也适用于更高的尺寸。可以使用shape
参数修改坐标数组的形状。