gpt4 book ai didi

python - 创建一个带有元素的 numpy 矩阵作为索引的函数

转载 作者:太空狗 更新时间:2023-10-30 00:22:04 27 4
gpt4 key购买 nike

如何创建一个 numpy 矩阵,其元素是其索引的函数?例如乘法口诀表:a[i,j] = i*j

Un-numpy 和 un-pythonic 将创建一个零数组,然后循环遍历。

毫无疑问,有更好的方法可以做到这一点,无需循环。

但是,更好的方法是直接创建矩阵。

最佳答案

通用解决方案是使用 np.fromfunction()

来自文档:

numpy.fromfunction(function, shape, **kwargs)

Construct an array by executing a function over each coordinate. Theresulting array therefore has a value fn(x, y, z) at coordinate (x, y,z).

以下代码段应提供所需的矩阵。

import numpy as np

np.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.]])

该函数的第一个参数是一个可调用对象,它针对每个坐标执行。如果 foo 是作为第一个参数传递的函数,则 foo(i,j) 将是 (i,j) 处的值.这也适用于更高的维度。可以使用 shape 参数修改坐标数组的形状。

编辑:

根据对使用自定义函数的评论,如 lambda x,y: 2*x if x > y else y/2,以下代码有效:

import numpy as np

def generic_f(shape, elementwise_f):
fv = np.vectorize(elementwise_f)
return np.fromfunction(fv, shape)


def elementwise_f(x , y):
return 2*x if x > y else y/2

print(generic_f( (5,5), elementwise_f))

输出:

[[0.  0.5 1.  1.5 2. ]
[2. 0.5 1. 1.5 2. ]
[4. 4. 1. 1.5 2. ]
[6. 6. 6. 1.5 2. ]
[8. 8. 8. 8. 2. ]]

用户需要传递一个标量函数来定义逐元素操作。 np.vectorize用于向量化用户定义的标量函数并传递给 np.fromfunction()。

关于python - 创建一个带有元素的 numpy 矩阵作为索引的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6254713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com