如何使用numpy.vectorize传递参数

2024-09-29 22:32:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在尝试将numpy用于对象,并运行函数,我一直在尝试使用numpy.vectorize函数,它工作得很好,但我不知道如何通过代码传递参数

import numpy as np
class ex:
   def __init__(self, a, b):
       self.a = a
       self.b = b

   def exfunc(self, c):
       print(c)

str = "hi"
lis =np.array([ex() for x in range(10)])    
exvec = np.vectorize(ex.exfunc, otypes=[object])

现在我不知道该怎么做,但我希望能通过这样的婴儿车exvec(lis,str)但这不起作用,所以我想知道我该怎么做类似于我刚才提前表示感谢的事情


Tags: 对象函数代码importselfnumpy参数def
1条回答
网友
1楼 · 发布于 2024-09-29 22:32:36

指定要“外部”传递的参数(从填充中排除 从源数组),将排除的参数传递到np。使用 字符串列表-矢量化函数的参数名称

例如:

  1. 源阵列:

     a = np.array(['abc', 'def', 'ghi', 'jko'])
    
  2. 要矢量化的函数:

     def myConcat(t1, t2):
         return t1 + '_' + t2
    

    您希望将t2传递到“外部”(并且t1从 基础数组)

  3. 生成矢量化函数:

     myConc = np.vectorize(myConcat, excluded=['t2'])
    
  4. 调用此函数:

     myConc(a, 'xx')
    

结果是:

array(['abc_xx', 'def_xx', 'ghi_xx', 'jko_xx'], dtype='<U6')

还有一个关于代码的注释:结果是空的,因为您的函数 (exfunc)只打印其参数,但不返回任何内容

还有一个基于您的类的修改示例:

class ex:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    def exfunc(self, c):
        print(c)
        return self.a + '_' + c + '_' + self.b

# Array of "ex" objects
lis = np.array([ex('a' + str(x), 'b' + str(x)) for x in range(10)])
# Create vectorized version of "exfunc"
exvec = np.vectorize(ex.exfunc, otypes=[object], excluded=['c'])
# Run this function
exvec(lis, np.array(['h0', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'h7', 'h8', 'h9']))

请注意,现在exfunc返回一些内容

结果是:

h0
h1
h2
h3
h4
h5
h6
h7
h8
h9

array(['a0_h0_b0', 'a1_h1_b1', 'a2_h2_b2', 'a3_h3_b3', 'a4_h4_b4',
       'a5_h5_b5', 'a6_h6_b6', 'a7_h7_b7', 'a8_h8_b8', 'a9_h9_b9'],
      dtype=object)

相关问题 更多 >

    热门问题