μ¬μ λͺ©λ‘μ΄ μμ΅λλ€. np.vectorizeλ₯Ό μ¬μ©νμ¬ λͺ©λ‘μ κ° μ¬μ μ λν μ¬μ μμλ₯Ό μμ νλ ν¨μλ₯Ό μ μ©νλ €κ³ ν©λλ€. κ²°κ³Όλ 벑ν°νκ° μ²« λ²μ§Έ μμμμ λ λ² μλνλ€λ κ²μ 보μ¬μ€λλ€. μ΄κ²μ κ³ μΉ μμλ λ²κ·Έμ λκΉ? (μλ§λ 벑ν°νκ° μ²« λ²μ§Έ μμμ μ νμ κ²μ¬νλ€λ μ¬μ€κ³Ό κ΄λ ¨μ΄ μμ΅λκΉ?) λ€μμ λͺ κ°μ§ μ¬λ‘ λ° μΆλ ₯μ λλ€.
μ¬μ μμ μ΄μλ κ°λ¨ν ν μ€νΈ μΌμ΄μ€ :
def fcn1(x):
return x['b']
a = [{'b': 1} for _ in range(3) ]
print(a)
print(np.vectorize(fcn1)(a))
print(a, '\n\n')
μ°μΆ:
[{'b': 1}, {'b': 1}, {'b': 1}]
[1 1 1]
[{'b': 1}, {'b': 1}, {'b': 1}]
μ΄μ μ¬μ μ μμ νκ³ ν¨μκ° μ²« λ²μ§Έ μμμ λ λ² μ μ©λλμ§ νμΈν©λλ€.
def fcn2(x):
x['b'] += 1
return x['b']
a = [{'b': 1} for _ in range(3) ]
print(a)
print(np.vectorize(fcn2)(a))
print(a, '\n\n')
μ°μΆ:
[{'b': 1}, {'b': 1}, {'b': 1}]
[3 2 2]
[{'b': 3}, {'b': 2}, {'b': 2}]
λ²κ·Έμ μΌκ΄μ±μ νμΈνλ €λ©΄ λ€λ₯Έ μμ μ μλνμμμ€.
def fcn3(x):
x['b'] *= 2
return x['b']
a = [{'b': 1} for _ in range(3) ]
print(a)
print(np.vectorize(fcn3)(a))
print(a, '\n\n')
μ°μΆ:
[{'b': 1}, {'b': 1}, {'b': 1}]
[4 2 2]
[{'b': 4}, {'b': 2}, {'b': 2}]
μ€μ λ‘ λ°ν κ°μ μ 곡νμ§ μκ³ λ λμΌν μμ μ μν ν μ μμ΅λλ€ (μ¬μ© μ¬λ‘μμ μ¬μ©νλ €λ λ°©λ²μ λλ€).
def fcn4(x):
x['b'] += 1
a = [{'b': 1} for _ in range(3) ]
print(a)
np.vectorize(fcn4)(a)
print(a, '\n\n')
μ°μΆ:
[{'b': 1}, {'b': 1}, {'b': 1}]
[{'b': 3}, {'b': 2}, {'b': 2}]
그건 κ·Έλ κ³ , κΈΈμ΄ 3μ λͺ©λ‘μ λν΄ νΉλ³ν κ²μ μμ΅λλ€. λΉμ μ κ·Έκ²μ λ³κ²½ν μ μκ³ λ λ² μμ λλ 첫 λ²μ§Έ μμμ λμΌν λμμ λ³Ό μ μμ΅λλ€.
Numpy λ²μ 1.11.3κ³Ό 1.12.0μ λͺ¨λ μ¬μ©νμ¬ λμμ νμΈνμ΅λλ€.
νΈμ§νλ€:
λν "첫 λ²μ§Έ μμμμ μ ν ν
μ€νΈ"λ¬Έμ λ₯Ό νμΈνλ ν΄κ²° λ°©λ²μ μ°Ύμμ΅λλ€. otypes
μΈμλ₯Ό μ§μ νλ©΄ 첫 λ²μ§Έ μμκ° λ λ² μ μ€λμ§ μμ΅λλ€.
def fcn(x):
x['b'] += 1
return x['b']
a = [{'b': 1} for _ in range(3)]
print a
print np.vectorize(fcn, otypes=[dict])(a)
print a, '\n\n'
μ°μΆ:
[{'b': 1}, {'b': 1}, {'b': 1}]
[2 2 2]
[{'b': 2}, {'b': 2}, {'b': 2}]
첫 λ²μ§Έ νλͺ© μ νμ΄ λ¬Έμ μ μμΈμΈμ§ νμΈνλ μλ‘μ΄ ν μ€νΈλ‘ κ²μλ¬Όμ νΈμ§νμ΅λλ€.
λ κ°λ¨ν ν μ€νΈ μΌμ΄μ€ :
a = np.array([1, 2, 3])
def f(x):
print('got', x)
return x
fv = np.vectorize(f)
y = fv(a)
μ 곡 :
got 1
got 1
got 2
got 3
"otypesλ₯Ό μ§μ νμ§ μμΌλ©΄ 첫 λ²μ§Έ μΈμκ°μλ ν¨μμ λν νΈμΆμ΄ μΆλ ₯ μλ₯Ό κ²°μ νλ λ° μ¬μ©λ©λλ€.μ΄ νΈμΆμ κ²°κ³Όλ ν¨μλ₯Ό λ λ² νΈμΆνμ§ μλλ‘ μΊμκ° Trueμ΄λ©΄ μΊμλ©λλ€. κ·Έλ¬λ ꡬννλ €λ©΄ μΊμ, μλ ν¨μλ₯Ό λνν΄μΌ νμ νΈμΆ μλκ° λλ €μ§λ―λ‘ ν¨μκ° λΉμΌ κ²½μ°μλ§μ΄ μμ
μ μννμμμ€. "
https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html
λ°λΌμ μ λ¬Έμν λ λμμ΄μ§λ§ μ§κ΄μ μ΄μ§ μμ κ²μ²λΌ 보μ λλ€. λ°λΌμ λ²κ·Έ μμ λ³΄λ€ κ°μ λ λΆλΆ μΌ μ μμ΅λλ€.
μ, λΆλͺ ν λͺ¨λ λ¬Έμλ₯Ό μΆ©λΆν μ½μ§ λͺ»νμ΅λλ€. μ΄μ€ νΈμΆ λ¬Έμ λ ν΄κ²°λμ§λ§ μ€ν μλκ° λλ €μ§λλ€. λ°λΌμ μ±λ₯μ μ μ§νλ©΄μ μ΄μ€ νΈμΆμ λ°©μ§ ν μμλ λ°©λ²μ΄ μλ€κ³ μκ°ν©λλ€.
μλ₯Ό λ€μ΄ vectorize
ν΄λμ€ ν¨μ _get_ufunc_and_otypes()
numpy/lib/function_base.py
μμ λ€μ μ€μ μμ ν μ μλ€κ³ μμ§νκ² μκ°ν©λλ€.
inputs = [arg.flat[0] for arg in args]
outputs = func(*inputs)
μ:
#earlier
import copy
...
inputs = copy.deepcopy([arg.flat[0] for arg in args])
outputs = func(*inputs)
κ·Έλ¦¬κ³ μΊμλ₯Ό μ¬μ©νκ±°λ otypeμ μ§μ ν νμλ μμ§λ§ μ€μ λ³κ²½ κ°λ₯ν μμλ₯Ό λ λ² λλ₯΄λ κ²μ νΌν μ μλ€κ³ μκ°ν©λλ€. κ·Έλ¬λ λλ μΊμ±κ³Ό λΉκ΅ν λ μΌλ§λ λ§μ μ±λ₯ μ νλ₯Ό κ°μ Έμ¬ μ§ λ¬΄μ§ν©λλ€.
μΊμ± λμμ΄ κ° λΉμΌ ν¨μ μ€ν μκ°μ μΌλμλκ³ μ€κ³λμλ€λ λλμ λ°κ³ μμ΅λλ€. ν¨μκ° κ°λ³ κ°μ²΄λ₯Ό μμ νλ κ²½μ°λ μκ°νμ§ μμ΅λλ€. κΈ΄ ν¨μ μ€ν μκ°μ μΌλμ λ μΊμ±μ μ±λ₯ μ νμμ΄ λ³κ²½ κ°λ₯ν κ°μ²΄ μμ μ μμ© ν μ μλ€κ³ μκ°ν©λλ€.
λ§€μ° ν° κ°μ²΄μ λ°°μ΄μ λν 벑ν°ν λ μμ
μ κ²½μ° μ€μ λ‘ ν¨μλ₯Ό μ μ©νλ λ° λλ λΉμ©λ³΄λ€ 첫 λ²μ§Έ μμμ κΉμ 볡μ¬λ³Έμ λ§λλ κ²μ΄ κ³μ° μ§μ½μ μΌ μ μλ€κ³ μκ°ν©λλ€. λ°λΌμ μ¬μ©μκ° otype
μ§μ νμ§ μμ κ²½μ° ν΄λΉ κΈ°λ₯μ μ¬μ©νλ κ²μ΄ μ’μ μ μμ§λ§ ν° λ°°μ΄μ λν΄ otype
λ₯Ό μ§μ νμ§ μμΌλ©΄ μ±λ₯μ΄ μ ν λ μ μλ€κ³ λ¬Έμμμ λ§ν©λλ€. μ¬λ¬Ό. @ eric-wieser μ΄λ»κ² μκ°νμΈμ?
copy.deepcopy()
λ λ§μ μ
λ ₯μμ μμ νμ§ μμΌλ―λ‘ λΆννλ μ€ν κ°λ₯ν μ΅μ
μ΄ μλλλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νλ μ μΌν λ°©λ²μ vectorize
μ μ½μ΄λ₯Ό λ€μ μμ±νλ κ²μ
λλ€. νμ¬ numpy.frompyfunc
λ₯Ό μ¬μ©νμ¬ μ€μ λ‘ numpy ufuncλ₯Ό μμ±ν©λλ€. np.apply_along_axis
μ¬μ©νλ κ²κ³Ό μ μ¬ν λ체 λ΄λΆ 루νλ₯Ό λ§λ€μ΄μΌν©λλ€. λΆννλ μ±λ₯ μ νλ₯Ό λ°©μ§νλ €λ©΄ Cμμ 루νλ₯Ό μνν΄μΌνλ€κ³ μκ°ν©λλ€ ( frompyfunc
κ° κ΅¬μ±νλ ufuncμμ μννλ μμ
).
κ°μ₯ μ μ©ν λκΈ
"otypesλ₯Ό μ§μ νμ§ μμΌλ©΄ 첫 λ²μ§Έ μΈμκ°μλ ν¨μμ λν νΈμΆμ΄ μΆλ ₯ μλ₯Ό κ²°μ νλ λ° μ¬μ©λ©λλ€.μ΄ νΈμΆμ κ²°κ³Όλ ν¨μλ₯Ό λ λ² νΈμΆνμ§ μλλ‘ μΊμκ° Trueμ΄λ©΄ μΊμλ©λλ€. κ·Έλ¬λ ꡬννλ €λ©΄ μΊμ, μλ ν¨μλ₯Ό λνν΄μΌ νμ νΈμΆ μλκ° λλ €μ§λ―λ‘ ν¨μκ° λΉμΌ κ²½μ°μλ§μ΄ μμ μ μννμμμ€. "
https://docs.scipy.org/doc/numpy/reference/generated/numpy.vectorize.html
λ°λΌμ μ λ¬Έμν λ λμμ΄μ§λ§ μ§κ΄μ μ΄μ§ μμ κ²μ²λΌ 보μ λλ€. λ°λΌμ λ²κ·Έ μμ λ³΄λ€ κ°μ λ λΆλΆ μΌ μ μμ΅λλ€.