@juliantaylor λ νλ€ λ¬Έμ μμ
ν°μΌμ μ :
import numpy as np
import random
random.sample(np.array([1,2,3]),1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/home/user1/py33/lib/python3.3/random.py", line 298, in sample
raise TypeError("Population must be a sequence or set. For dicts, use list(d).")
TypeError: Population must be a sequence or set. For dicts, use list(d).
μ΄κ²μ 3.3κ³Ό 1.7.0rc1.dev-3a52aa0, 3.2μ 1.6.2μμ λ°μν©λλ€.
λ¬Όλ‘ 2.7μ μν₯μλ°μ§ μμ΅λλ€.
cpython / Lib / random.py : 297μ κ΄λ ¨ μ½λ
from collections.abc import Set as _Set, Sequence as _Sequence
def sample(self, population, k):
# ...
if not isinstance(population, _Sequence):
raise TypeError("Population must be a sequence or set. For dicts, use list(d).")
λΉμ·ν ν
μ€νΈλ‘ stdlibμ λ€λ₯Έ μμΉλ₯Ό grep ν μ μμμ§λ§ lib2to3
κ°μ λ λλ±μ±μ λ³΄μ¬ μ£Όμλ€ :
lib2to3/fixes/fix_operator.py
5:operator.isSequenceType(obj) -> isinstance(obj, collections.Sequence)
2.7μμ
In [6]: operator.isSequenceType(np.array([1]))
Out[6]: True
νμ§λ§ 3.3 / 3.2μμλ
>>> isinstance(np.array([1]), collections.Sequence)
False
Python 3.xλ λ¨μν Python 2.xλ³΄λ€ random.sample
μμ λ μ격ν κ²μ¬λ₯Ό μνν©λλ€. 2.xμμ numpyλ Sequence νμ ν΄λμ€λ μλλλ€ (ndarrayμλ index
, count
λλ __reversed__
λ©μλκ° μμ΅λλ€). κ·Έλμ μ λ μ΄κ²μ random.sample
μ μ€μ© λλ Python 3.xμ νμ νΈνμ± μ€λ¨μΌλ‘ κ°μ£Ό ν μ μλ€κ³ μκ°ν©λλ€.
μΆ©λΆν 곡ννμ§λ§, μ°λ¦¬λ μ½κ² μνμ€λ₯Ό _make_ ndarray ν μ μμ΅λλ€.
μ΄λ¬ν λͺ¨λ λ°©λ²μ΄ μλ―Έκ° μκ³ κ°λ¨νκΈ° λλ¬Έμ
λꡬ. μ¬μ€ κ·Έλ‘λΆν° λ¬Όλ €λ°λ κ²λ§μΌλ‘λ μΆ©λΆν κ²μ
λλ€.
λλ½ λ λͺ¨λ λ©μλλ₯Ό λ―Ήμ€ μΈμΌλ‘ μ 곡ν©λλ€.
2012 λ
12 μ 2 μΌ 13:30μ "Ralf Gommers" [email protected]μ΄ μμ±νμ΅λλ€.
Python 3.xλ λ¨μν random.sampleμμλ³΄λ€ μ격ν κ²μ¬λ₯Ό μνν©λλ€.
Python 2.x. 2.xμμ numpyλ Sequence νμ ν΄λμ€λ μλλλ€ (ndarrayμλ
μμΈ, κ°μ λλ μλ°©ν₯ λ°©λ²). κ·Έλμ λλ μ΄κ²μ λ€μκ³Ό κ°μ΄ μκ°ν μ μλ€κ³ μκ°ν©λλ€.
random.sampleμ μ€μ© λλ μ΄μ λ²μ κ³Όμ νΈνμ± μ€λ¨
Python 3.x.β
μ΄ μ΄λ©μΌμ μ§μ λ΅μ₯νκ±°λ Gi tHubhttps : //github.com/numpy/numpy/issues/2776#issuecomment -10929601μμ νμΈνμΈμ.
λ λ―Έλ¬νκ² λ§λλ 2to3 μμ κ° μλμλ€λ©΄ λλ λκ°μ λ§μνμ κ²μ
λλ€.
μμΈ λ° κ°μκ° νμνμ§ μμ΅λλ€. λ§ν¬ ,
Sequence
λν λͺ¨λ μΆμ λ©μλλ μ΄λ―Έ ꡬνλμ΄ μκ³ λ€λ₯Έ λ©μλμλ κΈ°λ³Έ ꡬνμ΄ μμ΅λλ€.
λ¬Έμ λ MutableSequence
κ° μ€μ λ‘ λ μ ννκ³ insert
κ° κ΅¬νλμ§ μλλ€λ κ²μ
λλ€.
0-d λ°°μ΄μ μμ§ λ§μΈμ. μ§κΈ λΉμ₯ λ¬΄μ¨ μΌμ΄ μΌμ΄λλμ§ νμ€νμ§ μμ§λ§ μ€μ λ‘λ μνμ€κ° ββμλλλ€.
ν , Sequence
λ λΆλ³ κ°μ²΄λ₯Όμν κ²μ
λλ€. MutableSequence
(extend, pop)μ μΌλΆ λ©μλλ μλ―Έκ° μμ΅λλ€. λ€, μ°λ¦¬λ κ·Έ μΈ κ°μ§ λ°©λ²μ μΆκ° ν μ μμ§λ§ μ³μ§ μμ΅λλ€.
random.sample
μμ Sequence
μΈμ€ν΄μ€λ₯Ό μꡬν μ΄μ κ° μ νμλ κ² κ°μ΅λλ€.
__setitem__
μ΄ κ΅¬νλμμ§λ§ __delitem__
__setitem__
λ ꡬνλμ§ μμμΌλ―λ‘ SomewhatMutableSequence
?
μΈν°νμ΄μ€λ₯Ό "μνμ€μμ΄ λͺ¨λ κ²μ΄ μμ΄μΌνμ§λ§ μΌλΆλ
λμ°ν O () "κ° μκΈ° λλ¬Έμ μΌλΆ λ©μλμ μμ§ν ꡬνμ μ 곡ν©λλ€.
νμ€ν ndarrayμ λ§₯λ½μμ λΆλΆλͺ
ν κ²μ insert
, pop
μλ―Έκ° μλλλ€.
κ·Έλ¬λ 0-d λ°°μ΄μ λν λ°λ³΅κ³Ό κ΄λ ¨νμ¬ μ¬λ°λ₯Έ κ²μ΄ 무μμΈμ§ μ λͺ¨λ₯΄κ² μ΅λλ€.
λμ TypeError
μ¬λ¦¬λ __iter__
λ©μλλ₯Ό μ 곡νλ€κ³ μ£Όμ₯ ν μ μμ΅λλ€.
StopIteration
μ μ΄μ¨λ λ νμ΄ν μλ°μ
λλ€.
νΈμ§ : λΆμ£Όμ ν κ²°μ μ΄ μλλΌκ³ νμ ν©λλ€.
ndarrayλ μνμ€ μΌ μ μμ§λ§ λ³κ²½ λΆκ°λ₯ν΄μΌνλ€λ μλ―Έλ μλλλ€.
Btw. CPython λͺ©λ‘ ꡬνμ ν¨μ¨μ μΈ μ½μ , ν λ° νμ₯λ μ§μνμ§ μμ§λ§ μ¬μ ν MutableSequenceμ λλ€.
ndarrayλ in-place insert / pop / extend (ndarrayλ κ³ μ λ ν¬κΈ°λ₯Ό κ°μ§)λ₯Ό μ§μν μ μμΌλ―λ‘ λ³κ²½ κ°λ₯ν μνμ€μ΄μ§λ§ λ¨μν Python MutableSequence
κ° μλλλ€ (κ·Έλ¬μ§ μμ κ²μ
λλ€). νμ§λ§ Sequence
μΈν°νμ΄μ€λ₯Ό μ§μν μ μκ³ μ§μν΄μΌν©λλ€.
random.sample
κ° μ΄κ²μ νμΈνμ§ μμλ€λ©΄ μ’μ κ²μ
λλ€. κ·Έλ¬λ μμΈν μ΄ν΄λ³΄λ©΄ κ·Έλ΄λ―ν μ΄μ κ° μμ΅λλ€. λ€μν μ νμ μ
λ ₯ μΈμμ λν΄ μ¬λ¬ κ°μ§ ꡬνμ΄ μμΌλ―λ‘ μ΄λ€ λ°©λ²μ΄ νμν©λλ€. ꡬλ³νκΈ° μν΄. μΈλ±μ±μ μμνκ³ μ΅μ μ λ€ν μλ μμ΅λλ€. μλ§λ μ°λ¦¬λ λ²κ·Έλ₯Ό μ κ³ νκ³ μΈμ ν μμλ μ νμ λν΄ κΈ°λ³Έμ μΌλ‘ μνμ€ κ΅¬νμΌλ‘ λμκ°λλ‘ μ€λ ν μ μμ§λ§ λμμ΄ λ μμλ κ°μ₯ λΉ λ₯Έ κ²μ 3.4 ...
κ·Έλ¬λ 0-d λ°°μ΄μ λν μμ μ μ’μ κ²μ
λλ€. 0-d λ°°μ΄μ Sequence
μΈν°νμ΄μ€λ₯Ό μ§μνμ§ μμ΅λλ€ ( Iterable
μ‘°μ°¨λ μλλλ€). κ·Έλ¬λ Python λͺ©μ μΌλ‘ Sequence
λΌκ³ κ±°μ§λ§μ ν λ€μ μ€μ μ‘μΈμ€κ° μ€λ₯λ₯Ό λ°μμν¬ λκΉμ§ κΈ°λ€λ¦¬λ©΄ λ무 λμ°νμ§ μμ΅λλ€. λ νμ΄νμ μνλ©΄ νμ μ€ν¨ ν μ μμμ μλ―Έν©λλ€ :-). λ€μ°¨μ λ°°μ΄μμλ isinstance(a, Sequence)
μ±κ³΅νκ³ 0 μ°¨μ λ°°μ΄μμλ μ€ν¨ ν μ μμ΅λλ€. κ·Έλ κ² ν μ μλ€λ©΄ λ©μ§λ€. κ·Έλ¬λ μ°λ¦¬κ° ν μμλ μ΅μ μ λ°©λ²μ μλ§λ ndarrayλ₯Ό Sequence
λ‘ λ§λλ κ²μ
λλ€.
MaskedArrayμλ μ΄λ―Έ count
λ©μλκ° μμΌλ―λ‘ ndarrayμμ λ€λ₯Έ μμ
μ μννλ λ©μλλ₯Ό μΆκ°νλ©΄μ΄λ₯Ό κΉ¨λ¨λ¦΄ μ μμ΅λλ€.
0 μ°¨μ λ°°μ΄μ λͺ κ°μ§ νΈλ¦¬ν λ°©λ²μ΄μλ μ€μΉΌλΌλ‘ λ μ μκ°λ©λλ€ (μ μ΄λ λ΄κ° μκ°νλ λ°©μμ λλ€). λ°λ³΅ ν μμλ κ² μΈμλ μμΈμ μμ± ν μ μμ΅λλ€. λ°°μ΄λ‘ μκ°νλ©΄ ν¨μ¬ λ μ΄μν©λλ€. λ°λΌμ 0D λ°°μ΄μ λ€λ₯Έ λ°©μμΌλ‘ μΌκ΄μ±μ΄ μκ² λ§λλ κ²μ ν° λ¬Έμ κ° μλλλ€.
@njsmith μ΄λμμ μ¬λ¬ ꡬνμ λ³Ό μ μμ΅λκΉ? isinstance (Sequence) νμΈ ν len(population)
λκ³ λͺ©λ‘μΌλ‘ λ³νλ©λλ€. http://hg.python.org/cpython/file/22d891a2d533/Lib/random.py
Pandas Series λ° DataFrame μ νμλ νΈνλμ§ μλ count λ©μλμ μΈλ±μ€ μμ±λ μμ΅λλ€.
@rgommers : ν , λ§μμ, μ€λ₯ λ©μμ§μ μ€ν΄λ₯Ό λ°μμΌλ©° range()
μ μ½μλ‘ μ μλ₯Ό νμ©νλ€κ³ μκ°νμ§λ§ κ·Έλ μ§ μμ΅λλ€. κ·ΈλΌμλ λΆκ΅¬νκ³ κ·Έλ€μ μΈνΈ, μνμ€ λ° λ§€νμ λν΄ λ€λ₯Έ λμμ μ μνλ €κ³ ν©λλ€. μλ§λ μ°λ¦¬λ κ·Έλ€μ΄ κ·Έκ²μ μ νν΄μΌνλ€κ³ μ€λ ν μ μμ΅λλ€.
if isinstance(population, _Set):
population = tuple(population)
if isinstance(population, _Mapping):
raise Blarrrgh()
# Otherwise assume that we have a sequence and hope
μ΄λ κΈ°μ‘΄ ndarray νμ ν΄λμ€μ λν μ’μ μ μ΄κΈ°λν©λλ€. ndarrayκ° Sequence
λΌκ³ λ§ν μμλ λ°©λ²μ΄μλ κ²μ²λΌ 보μ΄μ§λ§ νμ ν΄λμ€λ κ·Έλ μ§ μμ΅λλ€. :-(. λ°λΌμ μ΄λ¬ν νμ ν΄λμ€ μ€ μΌλΆκ° Sequence
μΆ©μ‘± ν μ μλ€λ μ μ κ°μν λ μ΄λ€ μ΅μ
μ΄ κ°μ₯ λμμ§ μμ΅λλ€. νΈνμ±μ κΉ¨μ§ μκ³
Sequence
νΈν κ°λ₯ν λ²μ μΌλ‘ κ΅μ²΄νμμμ€. μ΄κ²μ count
λ©μλμ λν΄ κ°λ₯ν΄ λ³΄μ΄μ§λ§ Series.index
μ μ΄λ¦μ λ³κ²½νλ©΄ νλ€ μ¬λλ€μκ² ν° μ§μ₯μ μ€ κ²μ
λλ€. (DataFrameμ ndarrayμ νμ ν΄λμ€κ° μλλ―λ‘ κΈ°μ μ μΌλ‘λ κ΄λ ¨μ΄ μμ΅λλ€. λ¨, Seriesμ DataFrameμ΄ λκΈ°νλμ΄ μμ΄μΌνλ€κ³ μκ°ν©λλ€.) @wesm μκ² κ·Έκ° μκ°νλ λ°λ₯Ό λ¬Όμ΄λ³Ό μ μμ§λ§ ...Sequence
μ μλ₯Ό μΆ©μ‘±νλλ‘ μ μΈνκ³ μΌλΆ ndarray νμ ν΄λμ€μ λν΄ μ΄κ²μ΄ κ±°μ§λ§μμ λ°μλ€μ
λλ€. νμ§λ§ Sequence
μΈν°νμ΄μ€μ κ±°μ μ¬μ©λμ§ μλ λΆλΆμλ§ ν΄λΉλλ©° Python μ νμ μΌλ°μ μΌλ‘ μ΄μ¨λ κ±°μ§λ§μν©λλ€ ...class multidim_ndarray(ndarray, Sequence):
pass
λμ μ΄ ν΄λμ€μ λ€μ°¨μ λ°°μ΄ μΈμ€ν΄μ€λ₯Ό λ§λλλ€. νμ ν΄λμ€λ multidim_ndarray
μλλΌ ndarray
μμ κ³μ μμλκΈ° λλ¬Έμ μν₯μλ°μ§ μμ΅λλ€. λ¬Όλ‘ , λ¨μΌ ndarray κ°μ²΄λ .resize()
...λ₯Ό ν΅ν΄ 0-dμ λ€μ°¨μ μ¬μ΄λ₯Ό μ ν ν μ μμ΅λλ€.
ndarray
μ΄ μ λ Sequence
ν©λλ€.[ isSequenceType
κ²μ μ½κ° μ°λ§ν©λλ€. μ΄κ²μ μΆμ κΈ°λ³Έ ν΄λμ€ (2.6μ μΆκ°λ¨)μ μ‘΄μ¬λ³΄λ€ μ΄μ μ μ€λλ ν¨μμ΄λ©° μνμ€μ νμν μΈλΆ μΈν°νμ΄μ€λ₯Ό νμΈνμ§λ μμ΅λλ€. μ ν (1)μ΄ __getitem__
μ μνλμ§ νμΈνκΈ° λ§νλ©΄λ©λλ€ dict
κ° μλλλ€. λΆλͺ
ν μ΄κ²μ λ§μ μν©μμ μλͺ»λ λλ΅μ μ€ κ²μ
λλ€ (μ : dictμ²λΌ μλνμ§λ§ νλκ° μλ λͺ¨λ κ²!). λ°λΌμ μ€μ λ‘ μνμ€ μ νμ μνλ©΄ isinstance(obj, Sequence)
μ΄ λ λμ μμ
μ μννκ³ 2to3μ΄ μ¬λ°λ₯Έ μμ
μ μνν©λλ€. κ·Έλ¬λ κ·Έκ²μ numpyμ λ¬Έμ λ₯Ό μΌμΌν¨λ€ ...]
μλ§ κ°μ μλ‘μ΄ ν΄λμ€ μμ±νκΈ° μν΄ νμ΄μ¬ μ¬λλ€μ μ€λ ν μμμ κ²μ
λλ€ SequenceBase
λ μμ μ΄νμ΄λ©°, 보μ¦νμ§ μμ΅λλ€ .index
λλ .count
μμ§λ§ .__len__
λ° __getitem__
λ±? Sequenceκ° index
μ κ°μ κ²μ κ°μ§κ³ μλ€λ κ²μ λͺ¨λ λ©μ§μ§λ§, numpy
μ κ°μ κ²μ κ°μ λ‘ μ μ©νλ κ²μ μ½κ° μ΄μνκ² λ³΄μ
λλ€. νμ΄μ¬ μ¬λλ€μ μ΄κ²μ΄ λ€μ λ¬Έμ κ° μμμ μκ³ μμ΅λκΉ?
@sebergμ μ μμ΄ λ§μμ λλλ€. Python κ°λ°μκ° λμνμ§ μμΌλ©΄ @njsmithμ λ λ²μ§Έ κΈ λ¨Έλ¦¬ κΈ°νΈλ‘ μ΄λν©λλ€. λλ½ λ μ΅μ μ ndarrayκ° Sequence μΈν°νμ΄μ€λ₯Ό λ§μ‘±νμ§ μλλ€κ³ λ§νλ κ²μ λλ€. μ΅μ μ μλμ§λ§ μ΄μ 1κ³Ό 3 imhoλ³΄λ€ λ«μ΅λλ€.
[μμ½κ²λ "λλ½ λ μ΅μ "μ΄ μ΅μ 4μ μμλλ°, λ§ν¬ λ€μ΄ νμκ° νΌλμ€λ½κ³ μ½μ μμλ λ°©μμΌλ‘ μ΄μ κΈ λ¨Έλ¦¬ κΈ°νΈλ‘ μ μ΄ λ£κΈ°λ‘ κ²°μ νμ΅λλ€. μμμ μμ νκΈ° μν΄ λκΈμ μμ νμ΅λλ€.]
Sequence
λ±λ‘ λ μ νμ μ λ°, μ¦ buffer
λ° xrange
μλ μ΄λ¬ν λ©μλκ° μμ΅λλ€. collections.Sequence
λ₯Ό κΈ°λ³Έ ν΄λμ€ / λ―Ήμ μΌλ‘ μ¬μ©νλ μ¬λλ€μμν νΈλ¦¬ν λ©μλλ§νΌμ΄λ μΈν°νμ΄μ€μ νμ λ©μλλΌλ κ²μ λΆλͺ
νμ§ μμ΅λλ€.
@rkern : μ’μ μΊμΉ. λ°λΌμ ν΄κ²°μ±
μ Sequence.register(np.ndarray)
μ΄λκ°μ νΈμΆμ μΆκ°νλ κ²μ
λλ€. (μ΄κ²μ λν μλ κΈ°μμ ν΄κ²° λ°©λ²μ
λλ€.)
μΈμ κ°λ __reversed__
ꡬνν΄μΌν©λλ€ ...
@rkern λΉμ λ§μ΄ λ§μ΅λλ€. μ΄κ²μ PEPμμ μ΄λ¦° μ΄μλ‘ μΈκΈλμμ΅λλ€ : http://www.python.org/dev/peps/pep-3119/#sequences. Final μνμ PEPλ λ―Έν΄κ²° λ¬Έμ λ₯Ό κ°μ§ μλ μμ΅λλ€.
μ΄ λ²κ·Έμ μ λͺ©μ python3μμλ§ μ‘΄μ¬νμ§ μκΈ° λλ¬Έμ μ½κ° μ€ν΄μ μμ§κ° μλ€κ³ μκ°ν©λλ€. λ¬Όλ‘ random.sample(numpy_array)
λ python2μμ μλνμ§λ§ isinstance(np.array([1]), collections.Sequence)
λ λͺ¨λ νμ΄μ¬> = 2.6μμ True
λ₯Ό λ°νν΄μΌν©λλ€.
autopep8 λͺ¨λμ μ¬μ©νμ¬ Python 2.7μμμ΄ λ²κ·Έκ° λ°μνμ΅λλ€. κΈ°λ³Έμ μΌλ‘ operator.isSequenceType () νΈμΆ μ€ μΌλΆλ₯Ό isinstance (x, collections.Sequence)λ‘ λ³ννμ΅λλ€. numpy.ndarrayλ₯Ό ν΅κ³Όνλ©΄ ν μ€νΈκ° Falseκ°λ©λλ€. μ΄κ²μ λ§€μ° κ΅νν λ²κ·Έ μΌ μ μμ΅λλ€.
python-pillow λͺ¨λμ μ¬μ©νμ¬ Python 2.7μμλ λ°μνμ΅λλ€. Image.point (lut, mode)λ μ΄μ λ²μ μ΄ operator.isSequenceType ()μ μ¬μ©νλ isinstance (lut, collections.Sequence)λ₯Ό νΈμΆν©λλ€.
numpy μ«μ ν μ€μΉΌλΌ μ νμ΄ λ±λ‘λμμΌλ―λ‘ (# 4547), μ΄μ μ΄κ²μ λ€μ μ΄ν΄λ³Ό μ’μμκΈ°κ° λ κ²μ λλ€.
λ°λΌμ ν΄κ²°μ± μ μ΄λκ°μ Sequence.register (np.ndarray)μ λν νΈμΆμ μΆκ°νλ κ²μ λλ€.
λ€, μ’μ ννμ λλ€.
μ, μ΄λκ°μ Sequence.register(np.ndarray)
λ₯Ό μΆκ°νμΈμ.
@mitar PR μ μΆμ κ΄μ¬μ΄ μμ΅λκΉ?
νμ€ν. μ΄λλ‘ κ°μΌνλμ? np.ndarray
μ΄ μμ± λ λμΌν νμΌμμ?
μ°λ¦¬κ° μ€μ λ‘ μ΄κ²μ΄ μ’μ μκ°μ΄λΌκ³ μκ°νλμ§ νμΈνκΈ° μν΄ : μ°λ¦¬λ λ°©κΈ False
(# 9718) μΈ λΉ λ°°μ΄μ λν μ¬μ© μ€λ¨μ μΆκ°νκ³ μμ΅λλ€. μ¦, μνμ€μμ μλνλ κ² μ€ νλλ₯Ό μ κ±° νκ³ μμ΅λλ€) . μ£Όμμ μ½μμ§λ§ μ΄λ―Έ κ²°λ‘ μ λ°°μ΄ μ€μΉΌλΌκ° μλνμ§ μλλ€λ κ²μ΄λ―λ‘ λΉ λ°°μ΄μ΄ κ·Έ κΉ¨μ§ μ½μμ μΌλΆκ° λ μ μλ€κ³ μκ°ν©λλ€ ...
λμ€μ μ°Έμ‘° ν μ μλλ‘ μ μ ν μμΉλ numpy.core.multiarray
.
https://github.com/numpy/numpy/blob/4f1541e1cb68beb3049a21cbdec6e3d30c2afbbb/numpy/core/multiarray.py
μ’μ, μ΄κ±Έ μν΄. μ΄λ»κ²? μ΄κ²μ λ΄κ° κ·Έλ€μ λ©μλλ‘ κ΅¬ννλ λ°©λ²μ λλ€.
def __reversed__(self):
return iter(self[::-1])
def index(self, value) -> int:
return np.in1d(self, value).nonzero()[0]
def count(self, value) -> int:
return (self == value).sum()
# Necessary due to lack of __subclasshook__
collections.abc.register(np.ndarray)
μ΅μ λ²μ μ Tensorflow (2.0)μμ Sequence.register(np.ndarray)
κ° μμΌλ©΄ Tensorflowκ° μ€μλνλ κ²μ λ°κ²¬νμ΅λλ€. κ°μ΄ μνμ€μΈμ§ μ΄λκ°μμ νμΈνκ³ μ¬μ©νλ κ²μ΄ ndarrayμΈμ§ μ¬λΆμ λ€λ₯Έ κ² κ°μ΅λλ€.
μ°Έμ‘° : https://gitlab.com/datadrivendiscovery/d3m/issues/426
μ¬λ° λ€μ. λλ 무μΈκ°κ° λ°°μ΄μΈμ§ ν μ€νΈνλ κ²μ΄ λ λμ μκ°μ΄λΌκ³ νμ ν©λλ€. κ±°μ νμ νΉμνκ² μ²λ¦¬λλ κ²½μ°μ΄κΈ° λλ¬Έμ λλ€.
μλ§λ μ ν κ²μ¬μ μμκ° μλͺ»λμμ κ²μ λλ€. λ¨Όμ ndarrayλ₯Ό κ²μ¬ ν λ€μ μμλ₯Ό κ²μ¬ν΄μΌν©λλ€. κ·Έλ¬λ λ¨Όμ μνμ€λ₯Ό νμΈνλ©΄ μ΄μ ν΄λΉ μ½λ λΈλ‘μ΄ μ€νλ©λλ€.
@mitar μ°λ¦¬λ __contains__
/ operator.in
μ΄ λ€λ₯΄κ² λμνκΈ° λλ¬Έμ (λ°λ³΅λλ©° μνμ€κ° ββμλ) API κ³μ½μ μλ°νλ―λ‘μ΄λ₯Ό λ«λ κ²μ κ³ λ €νκ³ μμ΅λλ€. μ΄κ²μ λν μ μ€ μΌμ΄μ€κ° μμ΅λκΉ?
μ¬κΈ°μμ μΌλμλκ³ μλ API κ³μ½μ λν΄ μμΈν μ€λͺ ν΄ μ£Όμκ² μ΅λκΉ? μ νν μ΄ν΄νμ§ λͺ»ν©λλ€.
μ¬μ© μ¬λ‘λ μνμ€λ₯Ό λ°λ³΅νκ³ μ°¨μλ³λ‘ μ°¨μμ λ λλ¦° λ€μ μ¬κ·νλ κ²κ³Ό κ°μ΄ μ¬λ¬Όκ°μ λ³ννλ λ°©λ²μ μκ³ μλ μΌλ° μ½λλ₯Ό μμ±νλ κ²μ λλ€. κ·Έλ° λ€μ 2d ndarrayμ λμΌν λ°©μμΌλ‘ λͺ©λ‘ λͺ©λ‘μ λ³ν ν μ μμ§λ§ μ¬λ¬ μ°¨μ λ±μΌλ‘ μΌλ°ν ν μ μμ΅λλ€. κ·Έλ¦¬κ³ λλ κ·Έκ²μ΄ μνμ€μΈμ§ νμΈνλ κ² μ΄μμ νμΈν νμκ° μμ΅λλ€.
μΈκΈνλ―μ΄ λ°°μ΄μ μ€μ²© λ νμ΄μ¬ μνμ€λ‘ 보λ λ° λͺ κ°μ§ λ¬Έμ κ° μμ΅λλ€. __contains__
λ κ°μ₯ λͺ
λ°±ν κ²μ΄κ³ λ€λ₯Έ νλλ 0-D λ°°μ΄μ΄ νμ€ν μ€μ²© λ μνμ€κ° ββμλλΌλ κ²μ
λλ€. λν κΈΈμ΄ 0 μ°¨μκ³Ό κ°μ λ―Έλ¬ν¨μ΄ μ‘΄μ¬νλ©° μΌλ°μ μΌλ‘ arr[0] = 0
λ arr[0] == 0
μλ―Ένμ§ μμ΅λλ€. arr[0]
λ μμμ λ°°μ΄ μ체 μΌ μ μκΈ° λλ¬Έμ
λλ€. arr[0, ...]
κ°μΈμ μΌλ‘ "μ€μ²© λ μνμ€"ν΄μμ μ’μ§λ§ μ°λ¦¬κ° μκ°νλ κ²λ³΄λ€ λ μ μ©νλ€κ³ μκ°ν©λλ€. (μ¦, λ°°μ΄μ for col in array
λ‘ κ±°μ λ°λ³΅νμ§ μμ΅λλ€. for col in array.iter(axis=0)
κ·Έλμ λλ "λ°°μ΄μ μνμ€ λ€"λ₯Ό μ½κ° λ¬Έμ κ°μλ λΉμ λ‘ λ³΄λ κ²½ν₯μ΄ μμ΅λλ€ (μ΄κ²μ΄ μ μ© ν μ μλ€λ κ²μ μλ―Ένμ§λ μμ΅λλ€ , μΈμ ν©λλ€).
κ·Έλ¬λ μ¬μ© μ¬λ‘κ° λ¬΄μμ΄λ , μλ‘μ΄ "ElementwiseContainer"μ κ°μ μλ‘μ΄ ABCλ₯Ό νμνλ κ²μ΄ λ λ«μ§ μμμ§ κΆκΈν©λλ€. λν μ¬μ©μμκ² +
λ° ==
λ±μ΄ κ° μμ μμ μλ ν κ²μ΄λ©° Python μνμ€μ λ¬λ¦¬ +
κ° μ°κ²°λ κ²μΌλ‘ κΈ° λν΄μλ μλλ€κ³ μλ €μ£Όλ κ²μ
λλ€ ( μ +
λ μνμ€ ABCμ μΌλΆκ° μλμ§λ§ Pythonμμλ μμ°μ€λ½κ² λκ»΄μ§λλ€.)
κ·Έλ₯ μ§λκ° λ€-
λλ Pythonμ collections.abc.Sequence
κ° __eq__
λ° κΈ°ν λΉκ΅λ₯Ό ꡬννμ§ μλλ€λ μ μ μ§μ νκΈ° λλ¬Έμ μ§λμ£Όμ Python-ideasμ μΌμ΅λλ€
λλ κ±°κΈ°μ __eq__
μΆκ° ν κ²μ μ μνμ§λ§, λΆλͺ
ν Numpy.arrayμ λμκ³Όλ κ·Έ μνμ€κ° ββλ¬λΌμ§κ² λ§λ€ κ²μ
λλ€.
νμ΄μ¬μμ "μνμ€"κ° λ¬΄μμΈμ§ λ 곡μν ν λ€μ νΉμν κ²½μ°λ‘ λ°μ°λλ μ΄λ¬ν κ²λ€μ μμνμ¬ collections.abc.ComparableSequence
λ₯Ό μΆκ°νλ κ²μ μ΄λ»μ΅λκΉ? (κ·Έλ¦¬κ³ cancatenationμ λν +
κ° μμμ μΈκΈ λμκΈ° λλ¬Έμ "λΉκ΅ κ²°κ³Ό λ¨μΌ λΆμΈμ μμ±νκ³ μ°κ²°μμν μ€μΉΌλΌλ‘ μλνκ³ μ€μΉΌλΌλ₯Ό κ³±νλ μνμ€"λ₯Ό μμνλ λ€λ₯Έ μ΄λ¦μ΄μμ μ μμ΅λλ€. μ¦-Python λμ +
λ° *
μ κ²½μ° λͺ©λ‘ λ° νν). λ°λΌμ Sequenceμ μ¬μμ μ μ΄λ 1D numpy λ°°μ΄μ΄ μ νν μΌμΉνλ λ°©μμΌλ‘ νμν λ μ μμ΅λλ€.
Python μνμ€μ λνμ΄ νμνλ μμ https://github.com/numpy/numpy/issues/2776#issuecomment -330865166μμ μΈκΈ ν κ²κ³Ό κ°μ λ€λ₯Έ λΆκΈ°μλ λμμ΄ λ μ μμ΅λλ€.
λλ κ·Έ κΈΈμ νΌμμ λ΄λ €κ°λ κ²μ λν μΆ©λΆν λκΈ°λ₯Ό λλΌμ§ μμ§λ§, μ΄κ²μ΄ μλ―Έκ° μλ€λ©΄, λλ κΈ°κΊΌμ΄ PEP μμ±μ λκ³ κ·Έκ²μ λ°μ΄λ΄λ κ²μ λμΈ κ²μ
λλ€. (λλ μ μνμ€κ° __eq__
λ§λ€μ§ μμλμ§ νμΈνκ³ μΆμκ³ μλ§λ μ΄κ²μ κ°μ Έμ¬ λ PRμ΄μμ μ μμ΅λλ€)
@jsbueno λ΄ λ¬Έμ λ λ΄κ° μ€μ λ‘ ndarray
μ¬μ©μμκ² λμμ΄ λ μΆκ° λλ μ μ μ¬μ΄μ μ΄λ€ κ²μ΄ μλμ§ μ€μ λ‘ μμ§ λͺ»νλ€λ κ²μ
λλ€. λ΄κ° μκ°ν μμλ μ΅μ μ λ°©λ²μ count()
λ° index()
κ°μλ Collection
μ΄μ§λ§ μ μ©ν κΉμ? λ€λ₯Έ κ²μ νμ΄μ¬ μμ²΄κ° κ°λ
μ΄ κ±°μ λλ μ νμλ κ²μ λν ABCκ° λ κ²μ
λλ€.
SymPyκ° μ€μ λ‘ λ μ³λ€κ³ μκ°ν©λλ€. νλ ¬μ λͺ¨λ μμλ₯Ό ββλ°λ³΅νλ―λ‘ μ μ΄λ Collection
λ©λλ€.
μ΄μ μ°λ¦¬κ° κ·Έκ²μ λν΄ λ§μ κ²μ ν μ μμμ§ μμ¬μ€λ½κ³ λͺ¨λ μμμ SymPy λ°λ³΅μ΄ λ§€μ° μ μ©νκ³ μ§κ΄μ μΈμ§ νμ ν μ μμ§λ§ μ΅μν λͺ¨λ μμμ λ°λ³΅μ΄ __contains__
μ μΌμΉν©λλ€. μ΄κ²μ λν len(Matrix)
κ° μμμ μμ΄κ³ _not_ Matrix.shape[0]
μμ μλ―Έν©λλ€!
1 μ°¨μ λ°°μ΄μ μ μΈνκ³ μμμ λ§μ΄ λ°λ³΅ ν μνμ΄μλ κ²½μ° numpy λ°°μ΄μ 무μμ λκΉ? :
Container
: μμ μ€ : heavy_check_mark :Sized
+ Iterable
νμ λ°°μ΄ (1-Dκ° μλ κ²½μ°) : μ§λ¬Έ :Reversible
: ꡬνν μ μμ΅λλ€. κ±±μ ν νμκ° μμ΅λλ€. :μ§λ¬Έ:count()
λ° index()
: μμμ λν΄ κ΅¬ν κ°λ₯ (: heavy_check_mark :)Sequence
: νμ λ°°μ΄ λ°λ³΅ κ°λ₯κ³Ό μμ 컨ν
μ΄λ κ°μ λΆμΌμΉ : x :λ°λΌμ κ°μ₯ κΈ°λ³Έμ μΈ μμ± μ€ μΌλΆμ‘°μ°¨λ μΆ©λν©λλ€. NumPyμλ λ μμλ Container
μννλ λ°©λ²μ μκ³ μλ .index()
λ° .count()
, μ¦ Sequence
κ·Έλ¬λμμ΄ Iterable
μΌλΆμ
λλ€. λ
립μ μΌλ‘ Iterable
μ΄μ§λ§ νμ λ°°μ΄ μ
λλ€.
κ·Έλ¦¬κ³ κ·Έκ²μ΄ νΌλμ€λ¬μ 보μ΄λ©΄ λμνμ§λ§ μλμ μΌλ‘ μκ°ν©λλ€. μ μΌν μ§μ ν ν΄κ²°μ±
μ SymPy κ²½λ‘λ‘ μ΄λνκ±°λ μμνλ λ° Iterable
κ° μλ κ²μ
λλ€. (μ°λ¦¬λ SymPy κ²½λ‘λ‘ κ° μ μμΌλ©°, __iter__
λ μ΄μ μ¬μ©νμ§ μμ κ°λ₯μ±μ΄ μμ΅λλ€.)
κ°μΈμ μΌλ‘, 1D λ°°μ΄μ μ μ³λκ³ λ°°μ΄κ³Ό μ μ¬ν κ²μ Python 컬λ μ
κ³Ό λΉκ΅ν λ λ§€μ° λ€λ₯Έ μ§μΉμ΄λΌλ κ²μ
λλ€. λ°λ³΅ λμμ κ³ λ €ν λ __contains__
μ __iter__
μ¬μ΄μ λΆμΌμΉλ₯Ό ꡬ체μ μΌλ‘ μ리기 μν΄ MultidimensionalCollection
κ° νμν©λλ€ (νμ§λ§ μ μ©ν©λκΉ?).
νμ¬ Sequence
μ μ λ κ² μ΄μμ μ΄ν΄λ³΄λ©΄ ElementwiseCollection
(μ°μ°μλ 컨ν
μ΄λ μ°μ°μκ° μλ μμ λ³ μ°μ°μ, μ : +
)κ° κ°μ₯ λ§λ€κ³ μκ°ν©λλ€. μΌλ°μ μΌλ‘ numpy λ°°μ΄ λ° λͺ¨λ λ°°μ΄ μ μ¬ νΉμ± μ μ (λ°°μ΄ νλ‘κ·Έλλ° μ°Έμ‘°). κ·Έλ¬λ κ·Έκ²μ λν νμ΄μ¬ μ체μ μμ ν λ―μ€κ³ λλ‘λ μμΆ©λλ κ°λ
μ΄κΈ°λν©λλ€.
μ μΌν κ²μ νμ λ°°μ΄ λ μμμ λΆμΌμΉκ° μκΈ° λλ¬Έμ 1 μ°¨μ λ°°μ΄κ³Ό 1 μ°¨μ λ°°μ΄ λ§ μνμ€λ‘ νμνλ κ²μ
λλ€. κ·Έ μμ μμ μ, __eq__
λ λ¬Όλ‘ κ·Έλ€μ λν΄ μ μλμ§ μμμΌλ©° __nonzero__
λ μΌλ°μ μΈ νμ΄μ¬ μνμ€μ μ μ¬νκ² μ μλμ§ μμμ΅λλ€.
λ΅λ³ ν΄μ£Όμ μ κ°μ¬ λ리며, μ¬κΈ°μμ 8 λ λ λ§μ°¨μ νμ λ€μ ν λ² μ¬κ³Όλ립λλ€. κ·νμ μ견μΌλ‘, λ§μ§λ§ μ μ λ©μΌ κ΅ν ν λͺ μκ° ν μ€κ°μ λ€λ₯Έ μΉκ΅¬μ μ±ν μνλ©΄μ μ΄λ¬ν λλΆλΆμ κ·Έλλ‘ λλ κ²μ΄ μ’μ΅λλ€. μΈμ κ° νμ΄μ¬μ "collections.abc.Sequenceκ° μ§κΈ ꡬννλ κ²"λ³΄λ€ λ 곡μμ μΈ Sequence μ μλ₯Ό μ νν μ μμ΅λλ€.
μμ μ견μ μ½μ ν "νμ΄μ¬ μνμ€λ₯Ό λ§λλ κ²"μΌλ‘ λμ΄ν νΉμ±μλ ndarrayλ₯Ό λͺ©λ‘ λ° ννκ³Ό κ°μ μνμ€μ μ μ¬νκ² λ§λλ κ°μ₯ μ€μν κΈ°λ₯μ΄ λΆμ‘±νλ€κ³ μκ°ν©λλ€. λͺ¨λ κ°λ³ μμλ₯Ό μ²λ¦¬ ν μμλ 곡κ°μ λλ€. κ·Έλ¬λ λλ κ·Έκ²μ μν΄ abcλ₯Ό 곡μννλ κ²μ΄ μ½λ©μ΄λ μ μ μ ν νν μμ μ€μ©μ μΈ κ°μΉκ° μλ€κ³ μκ°νμ§ μμ΅λλ€.
@seberg λλ¨ν μλμμ€μ λλ€.
μ΄ λ¬Έμ λ Sequence
λλ Iterable
λλ Container
λ₯Ό μμνλ 컨ν
μ€νΈμμ ndarray
μ¬μ©μ κ΄ν κ²μΌλ‘ 보μ
λλ€. κ°λ¨ν μ κ·Ό λ°©μμ μ μ ν μΈν°νμ΄μ€λ₯Ό μ½μνκ³ μ 곡νκ³ isinstance
κ²μ¬μ μλ΅νλ μ λ ΄ν보기λ₯Ό μ 곡νλ ndarray
μ νμμ λλ κ²μ
λλ€. μλ₯Ό λ€λ©΄ :
class ndarray(Generic[T]):
def as_container(self) -> Container[T]:
if self.ndim == 0:
raise ValueError
return ContainerView(self) # correctly answers __len__, __iter__ etc.
def as_subarray_iterable(self) -> Iterable[np.ndarray[T]]:
if self.ndim <= 1:
raise ValueError
return SubarrayIterableView(self)
def as_scalar_sequence(self) -> Sequence[T]:
if self.ndim != 1:
raise ValueError
return ScalarView(self)
def as_subarray_sequence(self) -> Sequence[np.ndarray[T]]:
if self.ndim <= 1:
raise ValueError
return SubarraySequenceView(self) # this view has to reinterpret __contains__ to do the expected thing.
λͺ¨λ μ¬λμκ² λͺ¨λ κ²μ μ 곡νκ² λ€κ³ μ½μνλ ndarray
λμ μ¬μ©μλ κ·Έλ
μκ² νμν κ²μ μμ²νκ³ ndarray
μ 곡 ν μ μλ€λ©΄ κ°λ₯ν κ°μ₯ μ λ ΄ν λ°©λ²μΌλ‘ μ 곡ν©λλ€. ν μ μμΌλ©΄ μμΈκ° λ°μν©λλ€. μ΄λ κ²νλ©΄ μ¬μ©μκ° μνν΄μΌνλ ndim
κ²μ¬ (νΉν μ ν μ£Όμμ μ¬μ©ν λ)λ₯Ό ndarray
λ‘ μ΄λνμ¬ μ¬μ©μ μ½λλ₯Ό λ¨μνν©λλ€.
λ§μ§λ§ μ£Όμμ΄ Sequence
μλλΌ Iterable
Sequence
μ΄μ΄μΌν©λκΉ?
@ eric-wieser μ! κ°μ¬. λΉμ μ μκ°μ 무μμ λκΉ?
μ, as_subarray_sequence
λ κ±°μ list(arr)
:)
@ eric-wieser μ,보기λ₯Ό μ 곡νλ κ²μ΄ λ μ λ ΄ν κ²μ΄λΌκ³ μκ°νμ§λ§ λͺ¨λ₯΄κ² μ΅λλ€.
μ, list(arr)
λ len(arr)
λ·°λ₯Ό μμ±ν©λλ€.μ΄ λ·°λ₯Ό λ°λ³΅νλ©΄ μ΄μ¨λ μμ±νκ²λ©λλ€.
λλ μμ§λ μ°λ¦¬κ° ν μμλ μΌμ λ무 λ§μ μ΄μ μ λ§μΆκ³ μκ³ νμ¬ λ¬Έμ μ λν΄μλ μΆ©λΆνμ§ μλ€κ³ μκ°ν©λλ€. νΉν, μμμ μ 곡 ν λͺ¨λ λ°©λ²μ ndarrayμ μ μ¬ν κ²μ μκ³ μλ€λ©΄ ꡬννκΈ°κ° λ§€μ° μ½μ΅λλ€ (0-D λ°°μ΄μ΄ 컨ν
μ΄λκ° μλλΌλ λ° λμνμ§ μμ΅λλ€). λ°λΌμ νμ€ν λ ABCκ°μλ κ²½μ°μλ§ μ μ©νλ©°,μ΄ κ²½μ° κΈ°λ³Έ μΈλ±μ±μ΄ numpy νΈν κ°λ₯νκ³ .flat
μμ±μ ν¬ν¨ ν μ μμμ μ μνλ κ²μΌλ‘λ μΆ©λΆν©λλ€.
μλ λ¬Έμ ( random.sample
μλμ΄ μ€μ§λ¨)λ μκ°μ΄ μ§λ¨μ λ°λΌ μλΉν κ΄λ ¨μ±μ΄ μμ΄ λ³΄μ
λλ€. μ, μ½κ° μ±κ° μμ§λ§ μ¬μ©μκ° νμ λ°°μ΄ μ΄λ μμκ° μ νλκΈ°λ₯Ό κΈ°λν μ μκΈ° λλ¬Έμ λ μ’μ μλ μμ΅λλ€.
λλ μ°λ¦¬ κ° μ€λ¦¬ νμ΄ν μ½λλ₯Ό κΉ° κ²μ΄λΌκ³ νμ ν©λλ€. μ§λ ¬νμμ μΌλΆ λ¬Έμ κ° λ°μν μ μμ΅λλ€ (μμ κ° μμ΅λλ€). κ·Έλ¦¬κ³ κ·Έλ¬ν μ½λμ λλΆλΆμ ABC
sμμ isinstance
κ²μ¬λ₯Ό μ¬μ©νλ λ° λ¬Έμ κ° μμ§λ§ np.ndarray
ꡬ체μ μΌλ‘ νμΈνλ κ²μ μ«μ΄ν©λλ€. ndarrayμ λ©μλλ₯Ό μΆκ°νλ κ²μ΄ μ΄λ»κ² λμμ΄λλμ§ λͺ¨λ₯΄κ² μ΅λλ€. .ndim
μμ±λ³΄λ€ μ½κ° λ λ§κ³ μ€μ²© μνμ€ μ€νμΌ λ°λ³΅μ μ¨κΈΈ μμλ μλ‘μ΄ ABC
μ΄ νμν©λλ€.
μμ κ°μ λ°©λ²μ μ΄λ€ λ°°μ΄κ³Όλ μλνλ μλΉμ νλ‘ν μ½λ‘μ ν©λ¦¬μ μΌ μ μμ§λ§, μ°λ¦¬κ° ν΄κ²°νλ €λ λ¬Έμ λ 무μμ λκΉ :)? μΌλ°μ μΈ νμ΄μ¬ μνμ€κ° ββλ ΈμΆνκ³ μΆμ κ²κ³Όλ λ€λ₯Έ κ² κ°μ΅λλ€.
@ eric-wieser
λ¬Όλ‘ λ§μ§λ§ μ 체 μνμ€λ₯Ό λ°λ³΅ ν μλ μμ΅λλ€. λͺ κ°μ§ μμ λ§ μ νν μ μμ΅λλ€.
@seberg
λλ μμ§λ μ°λ¦¬κ° ν μμλ μΌμ λ무 λ§μ μ΄μ μ λ§μΆκ³ μκ³ νμ¬ λ¬Έμ μ λν΄μλ μΆ©λΆνμ§ μλ€κ³ μκ°ν©λλ€.
λμν©λλ€. μ΄λ€ μ’ λ₯μ λ¬Έμ λ₯Ό μμνκ³ μμ΅λκΉ? numpy 1.10μ΄ μ νκ³Ό ν¨κ» λμ¬ λ λλλ‘ 1 μ°¨μ numpy λ°°μ΄μ μνμ€λ‘ μ¬μ©νκ³ μΆμ κ²μ΄λΌκ³ μμνκ³ μμ΅λλ€. νμ¬ κ·Έλ κ²νλ €λ©΄ λ€μμ μνν΄μΌν©λλ€.
cast
λ₯Ό νΈμΆνμ¬ mypyμκ² μ€μ λ‘ μνμ€μμ μ립λλ€.κ·Έλμ μλμΌλ‘ μννλ λ°©λ²μ μ 곡νκ³ μΆμ΅λλ€. λλ ν° μΈν°νμ΄μ€λ μ«μ΄νμ§λ§, νμ μ΄λ Έν μ΄μ μ΄ λ°λΌ μ‘μΌλ©΄ μ μ΄λ° μ’ λ₯μ λ©μλ λ λ² μ΄ ν¨μκ° μ μ λ λ리 νΌμ§ κ² κ°λ€. μ΄λ»κ² μκ°ν΄?
(0-D λ°°μ΄μ΄ 컨ν μ΄λκ° μλλΌλ λ° λμνμ§ μμ΅λλ€).
μ λͺ¨λ₯΄κ² μ§λ§ νμ¬ __len__
μ λͺ¨κΈνκ³ μμΌλ―λ‘ μ»¨ν
μ΄λμ²λΌ μλνμ§ μλ κ² κ°μ΅λλ€. 컨ν
μ΄λλ₯Ό λ°μλ€μ΄λ ν¨μμ 0D λ°°μ΄μ μ λ¬νλ©΄ mypyκ° μ€λ₯λ₯Όλ³΄κ³ νλ κ²μ΄ λμμ΄ λ κ²μ΄λΌκ³ μκ°ν©λλ€. 0D λ°°μ΄ μ»¨ν
μ΄λλ₯Ό λ§λ€λ©΄ μ‘νμ§ μμ΅λλ€.
.ndim μμ±λ³΄λ€ μ½κ° λ λ§κ³ μ€μ²© μνμ€ μ€νμΌ λ°λ³΅μ ν¬ν¨ ν μμλ μ ABCκ° νμν©λλ€.
λλ κ·Έκ²μ λ΄ μ μμ μΆκ°νκ³ μΆμ§ μμμ§λ§ μ΄μ¨λ λΉμ μ΄ κ°κ³ μλ κ³³μ΄λΌκ³ μκ°ν©λλ€. μ λ νλ₯νκ² λμμΈ λ JAX λΌμ΄λΈλ¬λ¦¬μ μ΄λ ¬ν μ¬μ©μμ
λλ€. λλ λ―Έλμ numpy.ndarray
μ jax.numpy.ndarray
(μλΈ ν΄λμ€λ₯Ό κ°μ§κ³ μμ)κ° μ΄λ€ μ’
λ₯μ μΆμμ μΈ NDArray
μμ μμ λ κ²μ΄λΌκ³ μμν©λλ€. ndim
μ΄μμ κ°μ§ μ μμ΅λλ€. μ΄μμ μΌλ‘λ μ μ΄λ NDArray(Generic[T])
μ΄κ³ μ΄λ²€νΈμ λͺ¨μμ΄λ ν¬κΈ°λμμ μ μμ΅λλ€. __eq__
NDArray[np.bool_]
λ°ν ν μ μμ΅λλ€. λΉμ μ μλ§ λλ³΄λ€ λ μ μκ³ μμ΅λλ€ :)
λͺ λ
μ , numpy.array
μ΄ collections.Sequence
μμ μμλμ΄μΌνλ€κ³ μ μνκΈ° μν΄μ΄ λ¬Έμ λ₯Ό κ²μνμ§λ§ μ΄μ λμ΄ μ€λ λμμ μΈμ (νΉν κ·νμ κ² !!)κ° λ§€μ° μ€λλ ₯μ΄ μμμ λ°κ²¬νμ΅λλ€. Numpy λ°°μ΄μ μ€μ λ‘ μνμ€κ° ββμλλ©°μ΄λ₯Ό κ΅¬λ£ μ£Όλ©΄ μ’μ κ²λ³΄λ€ ν΄λ₯Ό λΌμΉλ κ²μ²λΌ 보μ
λλ€. μ κ·Έλ€ μμ μ κ²μ΄λκ²νκ³ μ¬μ©μκ° μνλ μΈν°νμ΄μ€λ₯Ό λͺ
μ μ μΌλ‘ μμ²νλλ‘ κ°μνμ§ μλ μ΄μ λ 무μμ
λκΉ?
κ·Έλ¦¬κ³ μ΄λ¬ν μ½λμ λλΆλΆμ ABCμμ isinstance κ²μ¬λ₯Ό μ¬μ©νλ λ° μλ¬΄λ° λ¬Έμ κ° μμ΅λλ€.
μ΄μ μΈκΈ νμΌλ―λ‘ λ΄κ° μ μν λͺ¨λ λ°©λ²μ΄ λ·°λ₯Ό λ°ννμ κ²μ λλ€. μ΄λ κ²νλ©΄ μΈμ€ν΄μ€ κ²μ¬μ μ¬λ°λ₯΄κ² μλ΅ ν μ μμ΅λλ€.
μμ κ°μ λ°©λ²μ μ΄λ€ λ°°μ΄κ³Όλ μλνλ μλΉμ νλ‘ν μ½λ‘μ ν©λ¦¬μ μΌ μ μμ§λ§, μ°λ¦¬κ° ν΄κ²°νλ €λ λ¬Έμ λ 무μμ λκΉ :)? μΌλ°μ μΈ νμ΄μ¬ μνμ€κ° ββλ ΈμΆνκ³ μΆμ κ²κ³Όλ λ€λ₯Έ κ² κ°μ΅λλ€.
λλ μ΄κ²μ λν λ΅μ΄ μ°λ¦¬κ° ν΄κ²°νλ €λ λ¬Έμ μ λ¬λ € μλ€λ λ° νμ€ν λμν©λλ€. νμ
μ΄λ
Έν
μ΄μ
kool aidλ₯Ό λ§μ ν # type: ignore
μ½λλ₯Ό ν©λΏ λ¦¬μ§ μκ³ mypyλ₯Ό μ λ¬νλ κ°κ²°ν numpy μ½λλ₯Ό μμ±νλ λ° κ΄μ¬μ΄ μμ΅λλ€. μΌλμλκ³ μλ λ¬Έμ λ 무μμ
λκΉ?
κΈμ, μ ν ννΈμ λ€λ₯Έ λ°°μ΄ μ μ¬ κ°μ²΄μμ μνΈ μ΄μ©μ μλ§λ μ’μ λκΈ°κ° λ κ²μ λλ€. μλ‘μ΄ λ¬Έμ λ λ©μΌ λ§λ¦¬μ€νΈ μ€λ λλ₯Ό μ¬λ κ²μ΄ μ’μ΅λλ€. μ§κΈ λΉμ₯μ νμ΄νμ΄ νμ±νλ κ²μ΄ κ°μ₯ μ’μ μκ°μ΄ λμ§ μ λͺ¨λ₯΄κ² μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
μ, μ΄λκ°μ
Sequence.register(np.ndarray)
λ₯Ό μΆκ°νμΈμ.