Чтобы указать параметры, которые будут передаваться «извне» (исключенные из заполнения из исходного массива), передайте параметр excluded в np.vectorize со списком строк - именами параметров векторизованной функции.
Пример:
Исходный массив:
a = np.array(['abc', 'def', 'ghi', 'jko'])
Функция для векторизации:
def myConcat(t1, t2):
return t1 + '_' + t2
Вы хотите, чтобы t2 передавался «извне» (и t1 заполнялся из базового массива).
Создать векторизованную функцию:
myConc = np.vectorize(myConcat, excluded=['t2'])
Вызов этой функции:
myConc(a, 'xx')
Результат:
array(['abc_xx', 'def_xx', 'ghi_xx', 'jko_xx'], dtype='<U6')
И примечание о вашем коде: результат пустой, поскольку ваша функция ( exfun c) только печатает свой аргумент, но ничего не возвращает.
И модифицированный пример на основе вашего класса:
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']))
Обратите внимание, что теперь exfun c что-то возвращает.
Результат:
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)