gpt4 book ai didi

python - 如何使用在每一行和每一列调用的函数有效地填充 numpy ndarray?

转载 作者:行者123 更新时间:2023-11-28 18:31:46 24 4
gpt4 key购买 nike

我想通过指定行和列的函数来定义值来创建一个 numpy ndarray。

例如,我希望能够做这样的事情(完全不正确的语法,但你应该明白这个想法):

>>> np.ndarray((2,3), lambda r,c: 3*r+c)
[[ 0 1 2]
[ 3 4 5]]

网上搜索一无所获,虽然我一直想不出具体如何搜索它...

现在我有(等同于)以下代码,但它的效率非常低:

def ndarrayFuncFill(size, func):
z = np.empty(size)
for r in np.arange(size[0]):
for c in np.arange(size[1]):
z[r][c] = func(r,c)
return z

>>> ndarrayFuncFill((2,3), lambda r,c: 3*r+c)
array([[ 0., 1., 2.],
[ 3., 4., 5.]])

不幸的是,我现在特别想使用它的函数不是我可以轻易重写为 ufunc 或类似的东西。我几乎不得不将其视为一个黑盒子。

我实际上有兴趣使用它的函数(不是像上面的 lambda 这么简单的东西),不是我有权发布的函数。但是,它本质上是在查找表上进行插值。所以你给它一行和一列,然后它将其转换为查找表中的索引——但是有一些棘手的事情发生在它不仅仅是一对一查找的地方,它有时会结合“附近”值(value)观之类的。所以它也不是最有效的函数,但我宁愿没有太多其他愚蠢的浪费源,比如嵌套 for 循环。

有什么建议吗?

最佳答案

您可以尝试使用 index arrays .对于您的简单示例,使用 np.indices你可以这样做:

import numpy as np
r, c = 2, 3
a = np.empty((r, c))
b = np.indices((r, c))
a[b[0], b[1]] = 3 * b[0] + b[1]

那么我们有:

>>> a
array([[ 0., 1., 2.],
[ 3., 4., 5.]])

关于python - 如何使用在每一行和每一列调用的函数有效地填充 numpy ndarray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36556494/

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