Numpy: рдмрдЧ: np.min рд╣рдореЗрд╢рд╛ NaNs рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 11 рдЬрдире░ 2018  ┬╖  65рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: numpy/numpy

рдпрд╣ рдЬрд╛рдВрдЪ рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ, рдпрд╛рдиреА 1.14 рдХреЗ рдЬрд╛рд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕реНрдХрд╛рдИ рд╕реАрдЖрдИ

рдореЗрд░реЗ рдШрд░ рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ (macOS, conda python 3.6.2, conda numpy):

>>> import numpy as np
>>> np.version.version
'1.14.0'
>>> np.min([1.0, 2.0, np.nan])
nan
>>> np.min([1.0, np.nan, 2.0])
nan
>>> np.min([np.nan, 1.0, 2.0])
nan
>>> np.min([np.nan, 1.0])
/Users/andrew/miniconda3/envs/dev3/lib/python3.6/site-packages/numpy/core/_methods.py:29: RuntimeWarning: invalid value encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims)
nan

рдореЗрд░реЗ рдХрд╛рдо рдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ (macOS, conda python 3.6.2, рдПрдХ рд╕реНрд╡рдЪреНрдЫ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрдиреНрди рд╕реНрдерд╛рдкрд┐рдд):

>>> import numpy as np
>>> np.version.version
'1.14.0'
>>> np.min([1., 2., 3., 4., np.nan])
nan
>>> np.min([1., 2., 3., np.nan, 4.])
nan
>>> np.min([1., 2., np.nan, 3., 4.])
nan
>>> np.min([1., np.nan, 2., 3., 4.])
nan
>>> np.min([np.nan, 1., 2., 3., 4.])
nan
>>> np.min([np.nan, 1.])
nan
>>> np.min([np.nan, 1., np.nan])
nan
>>> np.min([1., np.nan])
nan
>>> np.seterr(all='raise')
{'divide': 'warn', 'over': 'warn', 'under': 'ignore', 'invalid': 'warn'}
>>> np.min([1., np.nan])
nan
>>> np.min([np.nan, 1.])
nan
>>> np.min([np.nan, 1., 2., 3., 4.])
nan
>>> np.min([np.nan, 1., 2., 3., 4.])
nan

рдХреЛрдб рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рдкрд╣рд▓реЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рддреАрди рдЙрджрд╛рд╣рд░рдг рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдореЗрдВ рдкрд░рд┐рдгрд╛рдо рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо?
рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рджреВрд╕рд░реЗ рд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдХреЛрдИ рдЪреЗрддрд╛рд╡рдиреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред

00 - Bug numpy.core

рд╕рднреА 65 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

xref scipy / scipy # 8282, scipy / рдбрд░рдкреЛрдХ # 8279

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ рдПрдХ рдФрд░ рдмрд┐рдВрджреБ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреЛрдб рдкрде рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЯреНрд░рд┐рдЧрд░ рдХрд░рддреЗ рд╣реИрдВ (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЭреЗ рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИ) рд╡реНрдпрд╡рд╣рд╛рд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП AVX рдпрд╛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░рдг, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рдХрднреА-рдХрднреА рджреЗрдЦрд╛ рдХрд┐ рд╡реЗрдХреНрдЯрд░ рд╕рд╛рдордЧреНрд░реА рддреНрд░реБрдЯрд┐ рд╕реАрдкреАрдпреВ рдЭрдВрдбреЗ рд╕реЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рд╡рд┐рдлрд▓ рд░рд╣реА, рдФрд░ рдЪреВрдБрдХрд┐ рдЕрдЧрд░ рд╡реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ рддреЛ рдереЛрдбрд╝рд╛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рджрд┐рдЦрд╛рдИ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ ...ред

рдбрдирдиреЛ рдЕрдЧрд░ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХреБрдЫ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ, рд╕реБрдиреНрдирддрд╛ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рдЬреЛ рдЖрдорддреМрд░ рдкрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИред рд╕рд┐рд╡рд╛рдп рдЬрд╛рдБрдЪ рдХреЗ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╣реБрдЖред

рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдЪрдХ рдиреЗ рдХрд╣рд╛, рдЗрд╕ рдлреНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдПрд░рд░ рдлреНрд▓реИрдЧ рдХрд╛ рдХрд╛рдлреА рд╣рд┐рд╕реНрд╕рд╛ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рдЕрд▓рдЧ рд╣реИред

рдареАрдХ рд╣реИ, рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрдпрд╛ рдХрд┐ рддреНрд░реБрдЯрд┐ рдХреЗрд╡рд▓ рдХреБрдЫ рдЗрдВрд╕реНрдЯреЙрд▓ рдкрд░ рдХреНрдпреЛрдВ рд╣реЛрддреА рд╣реИ рдФрд░ рдЕрдиреНрдп рдирд╣реАрдВред
рдЬрд┐рд╕ рдХрд╛рд░рдг рд╕реЗ scipy np.min рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдРрд╕реЗ рд╕рд░рдгреА рдкрд░ рдХрд░ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдВрднрд╡рддрдГ NaN рд╢рд╛рдорд┐рд▓ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЙрдирдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд╛ рдПрдХ рддреНрд╡рд░рд┐рдд рддрд░реАрдХрд╛ рд╣реИред рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рджрд╕реНрддрд╛рд╡реЗрдЬ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реИ:

NaN рдорд╛рдиреЛрдВ рдХрд╛ рдкреНрд░рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЖрдЗрдЯрдо NaN рд╣реИ, рддреЛ рд╕рдВрдмрдВрдзрд┐рдд рдиреНрдпреВрдирддрдо рдорд╛рди NaN рднреА рд╣реЛрдЧрд╛ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ np.min рдХреЗ рд▓рд┐рдП рдЕрдиреБрдордд рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рдЙрдкрдпреЛрдЧ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдореИрдВ рдХрд┐рд╕реА рднреА рдЪреЗрддрд╛рд╡рдиреА / рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреА рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред

(рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рддрд░реАрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП np.isnan(arr).any() , рд▓реЗрдХрд┐рди рдпрд╣ рдореЗрд░реЗ рддрд░реНрдХ рдХреЛ рдКрдкрд░ рдирд╣реАрдВ рдмрджрд▓рддрд╛ рд╣реИ)

рдРрд╕рд╛ рдмрд┐рд▓реНрдХреБрд▓ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдПрдХ рдкреНрд░рд╢рдВрд╕рдиреАрдп рдкрд░рд┐рд╡рд░реНрддрди рд╣реИред

+1 рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ

рдирдорд╕реНрддреЗ,

рдореИрдВ рдПрдХ рд╕рдорд╛рди рдЕрд╕рдВрдЧрддрд┐ рдкрд░ рдареЛрдХрд░ рдЦрд╛рдИ:

>>> import numpy
>>> import warnings
>>> warnings.simplefilter("always", category=RuntimeWarning)
>>> numpy.min(numpy.full((7,), numpy.nan, dtype=numpy.float64))
nan
>>> numpy.min(numpy.full((8,), numpy.nan, dtype=numpy.float64))
/home/user/env/lib/python3.6/site-packages/numpy/core/_methods.py:29: RuntimeWarning: invalid value encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims)
nan

8 рд╕реЗ рдЕрдзрд┐рдХ рдХрд╛ рдПрдХ рдЖрдХрд╛рд░ рдХреНрдпреЛрдВ рдЙрдарддрд╛ рд╣реИ рдХрд┐ RuntimeWarning?

@NotSqrt @seberg рдореИрдВ рдРрд╕рд╛ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ рдЬрд╣рд╛рдВ рдорд┐рдирдЯ NaNs рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдкреНрд░рдЪрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЬрдм рдЗрдирдкреБрдЯ рд╕рд░рдгреА рдХрд╛ рдЖрдХрд╛рд░ 8 рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

> cat np-min-wat.py
import numpy as np

print "numpy version:", np.__version__
print ""

def show_min(input):
    print ""
    arr = np.array(input)
    print arr.dtype, arr
    print "this should be nan as per docs:", arr.min()
    arr = np.array

input = [31., 487., np.nan, 10000., 10000., 19., 101., 22., 1000., 300., 10.]
for x in xrange(3, len(input) + 1):
    show_min(input[0:x])

OSX рдФрд░ Windows рдкрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдЕрдЬреАрдм рд╡реНрдпрд╡рд╣рд╛рд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд┐рдирдХреНрд╕ рдирд╣реАрдВ .. рддрд╛рдЬрд╝реЗ рд╡рд░реНрдЪреБрдЕрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдЬрдЧрд░ 2.7.13 рдФрд░ рд╕реБрдиреНрди 1.14.2:

numpy version: 1.14.2

/Users/kip/ac/Environments/test/lib/python2.7/site-packages/numpy/core/_methods.py:29: RuntimeWarning: invalid value encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims)

float64 [ 31. 487.  nan]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000.]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000. 10000.]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000. 10000.    19.]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000. 10000.    19.   101.]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.]
this should be nan as per docs: 19.0

float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.]
this should be nan as per docs: 19.0

float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.   300.]
this should be nan as per docs: nan

float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.   300.
    10.]
this should be nan as per docs: nan

рджреЛ "рдпрд╣ рдбреЙрдХреНрд╕ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдирд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП: 19.0 " рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╡рд╣рд╛рдВ рджреЗрдЦреЗрдВ?

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдирд╛рдпрдм рдЪреЗрддрд╛рд╡рдиреА 1.13.1 рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ (рдЬреЛ рдХрд┐ рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрд╛ рд╣реИред)

@kippr рдЖрдкрдХреЛ NumPy рдХрд╣рд╛рдБ рд╕реЗ рдорд┐рд▓рд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрда рддрддреНрд╡ рд╕реАрдорд╛ AVX512 рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╕рдВрдХрд▓рдХ рдФрд░ рд╕реАрдкреАрдпреВ рдХреЗ рдХреБрдЫ рд╕рдВрдпреЛрдЬрди рд╣реИред рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ?

@juliantaylor рд╡рд┐рдЪрд╛рд░?

рд╕рдВрд░реЗрдЦрдг рдХрд╛ рднреА рдкреНрд░рднрд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рдИ @рдЪрд╛рд░рд┐рд╕

рдореЗрд░реА рдкреЛрд╕реНрдЯ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж .. рдЖрдкрдХреЗ рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП:

CPU :
тЭГ sysctl -n machdep.cpu.brand_string Intel (R) Core (TM) i7-6700K CPU @ 4.00GHz

NumPy рдореЗрд░реЗ рдореИрдХ рдкрд░ рдкрд╛рдЗрдк рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддрд╛рдЬрд╝реА рд╡рд░реНрдЪреБрдЕрдирд╡ (рд╣реЛрдордмреЙрд╡ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд 2.7.13) рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╕рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ рдЖрджрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ?

рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рд╡рд░реНрдЪреБрдЕрд▓ рдПрдирд╡реА рдФрд░ рд░реЗрд░рди рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХреЛ рдлрд┐рд░ рд╕реЗ рдмрдирд╛рдпрд╛ рд╣реИ, рдФрд░ рдпрд╣рд╛рдБ рд╡рд╣ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрджреЗрд╢ рд╣реИрдВ рдЬреЛ рдЗрдВрд╕реНрдЯреЙрд▓ рдкрд░ рдЖрддреЗ рд╣реИрдВ .. (рдкреВрд░реНрдг рд▓реЙрдЧ рдЗрди рд╕рдВрд▓рдЧреНрдиред) рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдмрддрд╛рдПрдВ рдХрд┐ рдХреНрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рд╣реИред рдмрд┐рд▓реНрдб рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдпрд╛ рд╡реНрд╣рд╛рдЯреНрдиреЙрдЯ рд╕реЗ рдордЫрд▓реА рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рдпрджрд┐ рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рд┐рдд рдЭрдВрдбреЗ рд╣реИрдВред

[..]
 Downloading numpy-1.14.2.zip (4.9MB):                                                                                                                                                                                                                                            
  Downloading from URL https://pypi.python.org/packages/0b/66/86185402ee2d55865c675c06a5cfef742e39f4635a4ce1b1aefd20711c13/numpy-1.14.2.zip#md5=080f01a19707cf467393e426382c7619 (from https://pypi.python.org/simple/numpy/)                                                      
...Downloading numpy-1.14.2.zip (4.9MB): 4.9MB downloaded              
[..]
    building library "npymath" sources
    get_default_fcompiler: matching types: '['gnu95', 'nag', 'absoft', 'ibm', 'intel', 'gnu', 'g95', 'pg']'
    customize Gnu95FCompiler
    Found executable /usr/local/bin/gfortran
    customize Gnu95FCompiler
    customize Gnu95FCompiler using config
    C compiler: clang -fno-strict-aliasing -fno-common -dynamic -I/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes

    compile options: '-Inumpy/core/src/private -Inumpy/core/src -Inumpy/core -Inumpy/core/src/npymath -Inumpy/core/src/multiarray -Inumpy/core/src/umath -Inumpy/core/src/npysort -I/usr/local/Cellar/python/2.7.13/Frameworks/Python.framework/Versions/2.7/include/python2.7 -c'
    clang: _configtest.c
    clang _configtest.o -o _configtest
    success!
    removing: _configtest.c _configtest.o _configtest

рдзрдиреНрдпрд╡рд╛рдж
рдХреНрд░рд┐рд╕

build.log

PS рд╢рд╛рдпрдж рдХреЛрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдзрд┐рдХрддрдо рдХреЗ рд╕рд╛рде рджрд┐рдЦрд╛рдИ рджреЗрддрд╛ рд╣реИ:

numpy version: 1.14.2


arr.dtype, arr: float64 [ 31. 487.  nan]
/Users/kip/ac/Environments/meh/lib/python2.7/site-packages/numpy/core/_methods.py:29: RuntimeWarning: invalid value encountered in reduce
  return umr_minimum(a, axis, None, out, keepdims)
arr.min(): nan
/Users/kip/ac/Environments/meh/lib/python2.7/site-packages/numpy/core/_methods.py:26: RuntimeWarning: invalid value encountered in reduce
  return umr_maximum(a, axis, None, out, keepdims)
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 31.0

arr.dtype, arr: float64 [   31.   487.    nan 10000.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 31.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 31.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 19.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.   101.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 19.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.]
arr.min(): 19.0
arr.max(): 10000.0
np.amin(arr): 19.0
np.nanmin(arr): 19.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.]
arr.min(): 19.0
arr.max(): 10000.0
np.amin(arr): 19.0
np.nanmin(arr): 19.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.   300.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 19.0

arr.dtype, arr: float64 [   31.   487.    nan 10000. 10000.    19.   101.    22.  1000.   300.
    10.]
arr.min(): nan
arr.max(): nan
np.amin(arr): nan
np.nanmin(arr): 10.0

рдореИрдВ рдПрдХ рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рд╕рдВрд╕реНрдХрд░рдг (рдЖрд░реНрдЪ рдкрд░) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ AVX2 рдФрд░ sse4.2 рдХреНрд╖рдорддрд╛рдПрдВ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд▓рд┐рдирдХреНрд╕ рдкрд░ рдирд╣реАрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВред рд╢рд╛рдпрдж рдпрд╣ рдореИрдХ / рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рдХреБрдЫ рдХрд░рдирд╛ рд╣реИ?

EDIT / рд╕рдВрд╢реЛрдзрди: (рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рд╕рдВрд░реЗрдЦрдгреЛрдВ рдХреЛ рднрдбрд╝рдХрд╛рдиреЗ рдХреЗ рд╕рд╛рде рд▓рдЧрднрдЧ рдХреЛрд╢рд┐рд╢ рдХреА рдереА, рдЪреЗрддрд╛рд╡рдиреА рднрд╛рдЧ рдХреА рдЬрд╛рдВрдЪ рдирд╣реАрдВ рдХреА рдереА, рд▓реЗрдХрд┐рди рдЧрд▓рдд рдкрд░рд┐рдгрд╛рдо рд╡рд╛рд▓рд╛ рднрд╛рдЧ рдЬреЛ рдореИрдВ рдирд╣реАрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ)

рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдПрдХ рд╕реАрдкреАрдпреВ рдЭрдВрдбрд╛ рд╣реИ рдЬреЛ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕реЗрдЯ рдирд╣реАрдВ рд╣реЛ рд░рд╣рд╛ рд╣реИ, рд╢рд╛рдпрдж рдХрдВрдкрд╛рдЗрд▓рд░ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ рдЗрд╕реЗ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред @kippr рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ

np.min(np.diagflat([np.nan]*10), axis=0)

рдЕрдкрдиреЗ рд╕реНрдерд╛рдкрдирд╛ рдкрд░ рдХреНрдпрд╛?

рд╣рд╛рдИ @рдЪрд╛рд░рд┐рд╕

рдпрд╣ рдареАрдХ рд▓рдЧрддрд╛ рд╣реИ:

In [1]: import numpy as np

In [2]: np.min(np.diagflat([np.nan]*10), axis=0)
Out[2]: array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan])

рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХреБрдЫ рдФрд░ рдХреЙрдореНрдмреЛ рдЖрдЬрд╝рдорд╛рдП рдФрд░ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд╛рдпрд╛ (рдЕрдВрддрд┐рдо рдПрдХ, 8 рдорд╛рди рдФрд░ рдЕрдХреНрд╖ = 1 рджреЗрдЦреЗрдВ)

In [3]: np.min(np.diagflat([np.nan]*10), axis=1)
Out[3]: array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan])

In [4]: np.min(np.diagflat([np.nan]*8), axis=0)
Out[4]: array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan])

In [5]: np.min(np.diagflat([np.nan]*8), axis=1)
Out[5]: array([ nan,  nan,   0.,   0.,  nan,   0.,  nan,  nan])

рдХрд╛рдлреА рд░рд╣рд╕реНрдпрдордп .. рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдпрд╣ рдХрд╛рд░рдг рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддрд╛ рд╣реИред

@рдмрд░реНрдЧ - рд╣рд╛рдБ рдпрд╣ рд╕рд╣реА рд╣реИ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ

рдзрдиреНрдпрд╡рд╛рдж
рдХреНрд░рд┐рд╕

@kippr рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдмрдЧ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдмреБрдирд┐рдпрд╛рджреА рдСрдкрд░реЗрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╕реНрдпрд╛ рд╢рд╛рдпрдж NumPy рдХреЗ рд╕рд╛рде рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рд╣рдо рдореИрдХ рдФрд░ рд╡рд┐рдВрдбреЛрдЬ рдкрд░ рд╡реИрд╢реНрд╡реАрдХрд░рдг рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдорджрдж рдХрд░рддрд╛ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдХреЗрд╡рд▓ рдкрд╛рдпрдерди 2.7 рдкрд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ?

рдореИрдВ NumPy рдореЗрдВ рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдЬрд┐рд╕рдиреЗ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ 1.14 рдХреЗ рд▓рд┐рдП рдмрджрд▓ рджрд┐рдпрд╛ рд╣реЛред рд╢рд╛рдпрдж OpenBLAS рдирд┐рдпрдВрддреНрд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдлрд╝рд┐рдбрд┐рдВрдЧ рдХрд░ рд░рд╣рд╛ рд╣реИ ...

@juliantaylor @VictorRodriguez рд╡рд┐рдЪрд╛рд░?

рд╣рд╛рдИ @рдЪрд╛рд░рд┐рд╕

рдореИрдВ рдЕрдкрдиреЗ рдореИрдХ рдкрд░ рдЕрдЬрдЧрд░ 3 рдореЗрдВ рднреА рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрддрд╛ рд╣реВрдВ:

Python 3.6.0 (default, Jan 23 2017, 20:09:28)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np

>>> np.min(np.diagflat([np.nan]*8), axis=1)
array([nan, nan,  0.,  0., nan,  0., nan, nan])
>>> np.__version__
'1.14.2'

Nb рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ рдЕрдкрдиреЗ рдореИрдХ рдкрд░ рдкрд╛рдпрдерди 2.7 рдХреЗ рддрд╣рдд NumPy рд╕рдВрд╕реНрдХрд░рдг 1.13 рдореЗрдВ рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ 1.14 рдореЗрдВ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкреНрд░рддрд┐рдЧрдорди рдирд╣реАрдВ рдерд╛:

Python 2.7.10 (default, Feb  7 2017, 00:08:15)
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.min(np.diagflat([np.nan]*8), axis=1)
array([ nan,  nan,   0.,   0.,  nan,   0.,  nan,  nan])
>>> np.__version__
'1.13.1'

рдФрд░ рдЗрд╕реЗ рд╕рд╛рдЗрдмрд░рд╡рд┐рди / рд╡рд┐рдВрдбреЛ рдореЗрдВ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛:

$ python
Python 2.7.13 (default, Mar 13 2017, 20:56:15)
[GCC 5.4.0] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.min(np.diagflat([np.nan]*8), axis=1)
array([ nan,  nan,   0.,   0.,  nan,   0.,  nan,  nan])
>>> np.__version__
'1.13.1'

рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рджреЗрдЦреЗрдВ:

Python 2.7.6 (default, Oct 26 2016, 20:32:47) 
[GCC 4.8.4] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> np.min(np.diagflat([np.nan]*8), axis=1)
array([ nan,  nan,  nan,  nan,  nan,  nan,  nan,  nan])
>>> np.__version__
'1.13.1'

@charris рдореИрдВрдиреЗ @kippr рдЖрдкрдиреЗ рдореИрдХ / рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ рдЕрдкрдиреЗ рдЕрдВрдХреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛? рд╕рд╛рджрд░

рд╣рд╛рдп @VictorRodriguez

рдпрд╣ рджреЛрдиреЛрдВ рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдерд╛, рдореИрдХ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЪрд╕реНрд╡ред рдКрдкрд░ рджреЗрдЦреЗрдВ рдЬрд╣рд╛рдВ рдореИрдВрдиреЗ рдкрд╛рдИрдк рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рдХреЛ рдЪрд┐рдкрдХрд╛рдпрд╛ рдерд╛ рдЬрд┐рд╕рдореЗрдВ рдЕрдЬрдЧрд░ 2.7 рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рди рдЖрдЙрдЯрдкреБрдЯ рд╢рд╛рдорд┐рд▓ рдерд╛ред (рдЕрдЬрдЧрд░ 3 рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдПрдХ рдкрд╣рд┐рдпрд╛ рд▓рдЧрддрд╛ рд╣реИред)

рдЪреАрдпрд░реНрд╕ рдХреНрд░рд┐рд╕

рд╣реИрд▓реЛ рдпрд╛рд░реЛ
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдореИрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

рдзрдиреНрдпрд╡рд╛рдж

рдореИрдХ рдкрд░ (рдФрд░ рд╢рд╛рдпрдж рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ) рдмрдЧ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрдХрд▓рдХ (рдореИрдХ рдкрд░ рдпрд╣ рдХреНрд▓реИрдВрдЧ / llvm рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛрдЧрд╛) рдПрдХ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рддрд░реАрдХреЗ рд╕реЗ SSE2 рдХрдорд╛рдВрдб рдХреЛ рдкреБрдирдГ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдмрдЧ рдореЗрдВ:

np.min(np.diagflat([np.nan]*8), axis=1)

рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЬреЛ рдХреЛрдб рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рд╡рд╣ sse2_minimum_DOUBLE рд╕реЗ рдЙрддреНрдкрдиреНрди рд╣реИ:
https://github.com/numpy/numpy/blob/d7d5cb3feccc1fc6cf57159e8b9fe0a733968706/numpy/core/src/umath/simd.inc.src#L1020

рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЗрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВ (рдореИрдВрдиреЗ рдСрдЯреЛ рдХреЛ SSE2 рдлреЙрд░реНрдо рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛ рд╣реИ) 1041 рдХреА рдкрдВрдХреНрддрд┐ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░:

        }
        c1 = _mm_min_pd(c1, c2);

        if (npy_get_floatstatus() & NPY_FPE_INVALID) {
            *op = NPY_NAN;
        }
        else {
            npy_double tmp = sse2_horizontal_min___m128d(c1);
            ....
         }

рд╕рдВрдХрд▓рдХ рдпрд╣ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ рдХрд┐ c1 рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдФрд░ npy_get_floatstatus () рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЛрдб рдХреЛ рдЗрд╕рдореЗрдВ рдмрджрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

        }
        if (npy_get_floatstatus() & NPY_FPE_INVALID) {
            *op = NPY_NAN;
        }
        else {
            c1 = _mm_min_pd(c1, c2);
            npy_double tmp = sse2_horizontal_min___m128d(c1);
            ....
         }

рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреИрд░-рд╕рдордЭрджрд╛рд░ рд╣реИ ... рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рддрд╣рдд рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд╢рдВрд╕рд┐рдд рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдореЗрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП STDC FENV_ACCESS рдкреНрд░реИрдЧреНрдорд╛ рд╣реИ?)

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдХреЛрдб рдореЗрдВ рдмрджрд▓рд╛рд╡ 5 рд╕рд╛рд▓ рдкреБрд░рд╛рдирд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдмрдЧ рдХрд╛ рдХрд╛рд░рдг рдХреНрд▓реИрдВрдЧ рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдФрд░ рд╡рд┐рднрд┐рдиреНрди рдЕрдиреБрдХреВрд▓рди рд╣реИрдВ?

рдзрдиреНрдпрд╡рд╛рдж @tzickel

рдореИрдВрдиреЗ рдПрдХ рд╣рд╛рдИ рд╕реНрдХреВрд▓ рдХреА рдХрдХреНрд╖рд╛ рдореЗрдВ рдХрдИ рдЪрдВрджреНрд░рдорд╛рдУрдВ рд╕реЗ рдкрд╣рд▓реЗ рд╕реА рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдирд╣реАрдВ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ рдореВрд▓ рдХреНрд░рдо рдореЗрдВ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЙрдкрд░реЛрдХреНрдд рдХреЗ рдмрдпрд╛рди рдХреЛ рдмрджрд▓рдиреЗ рдкрд░:

if ((sizeof(c1) != 0) || (sizeof(c1) == 0) & npy_get_floatstatus() & NPY_FPE_INVALID) {

рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрдХ рдмрд╛рд░ рдЬрдм рдореИрдВ рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдмрдЧ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

(рдпрджрд┐ рдореИрдВрдиреЗ рдХрдерди рдХреЗ рдЖрдЧреЗ _mm_min_pd рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдВрдХрд▓рдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рдХрдо рдЧреВрдВрдЧрд╛ рд░реВрдкреЛрдВ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рднреА рд▓рд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрдерди рдХреЗ рджреЛрдиреЛрдВ рдУрд░ c1 рдФрд░ рд╕рдВрджрд░реНрдн рдореЗрдВ if / else рдмреНрд▓реЙрдХ рдХреЗ рд╕рднреА рд╕рдВрджрд░реНрднреЛрдВ рдХреЛ рдбрд╛рд▓рдХрд░, рд╕рднреА рдХреЛрдИ рд▓рд╛рдн рдирд╣реАрдВред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдиреЗ рдЙрдиреНрд╣реЗрдВ рдпрд╛ рддреЛ рд╡реИрд╕реЗ рднреА рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ рдХрд░ рджрд┐рдпрд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ c = _mm_min_pd рдЕрд╕рд╛рдЗрдирдореЗрдВрдЯ рдЪрд▓рд╛рдпрд╛, рдпрд╛ рд▓рдЧрд╛ рдХрд┐ рдореЗрд░реЗ рдХреЙрд▓ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдлреЙрд░реНрдо рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдХреЗ рдиреЙрдк рдереЗ ..)

рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ рдореИрдВ рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдкрдиреЗ рдЙрд╕ рдмрдЧ рдХреА рдкрд╣рдЪрд╛рди рдХрд░ рд▓реА рд╣реИ рдЬреЛ рдореИрдВ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдЖрд╢рд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЛ _mm_min_pd рдФрд░ npy_get_floatstatus рдХрд╛ рдХреНрд░рдо рдЫреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИред

рдареАрдХ рд╣реИ, рдПрдХ рдФрд░ рдЪреАрдЬ рдЬреЛ Google рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рднреА рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ: c1 рдЕрд╕реНрдерд┐рд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рдирд╛:

https://github.com/numpy/numpy/blob/d7d5cb3feccc1fc6cf57159e8b9fe0a733968706/numpy/core/src/umath/simd.inc.src#L1029

рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ:

        /* load the first elements */
        @vtype@ volatile c1 = @vpre@_load_@vsuf@((@type@*)&ip[i]);
        @vtype@ c2 = @vpre@_load_@vsuf@((@type@*)&ip[i + stride]);
        i += 2 * stride;

рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕ рд▓рдХреНрд╖реНрдп рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред

рдЗрд╕ @tzickel рдкрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдбрд┐рдмрдЧ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрд╣реБрдд рдзрдиреНрдпрд╡рд╛рдж, рдпрд╣ рдмрд╣реБрдд рдЧрд╣рд░рд╛ рдбрд┐рдмрдЧ рдерд╛, @kippr рдореЗрд░рд╛ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ, рдЖрдк рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдореИрдХ рдкрд░ рдПрдХ рддрд╛рдЬрд╛ рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЦрд░реЛрдВрдЪ рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ? рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдЧрд░ рдореИрдВ gcc рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рд▓рд┐рдирдХреНрд╕ рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдЪрд▓рддрд╛ рд╣реВрдВ:

$ рдЕрдЬрдЧрд░
рдкрд╛рдпрдерди 3.6.5 (рдбрд┐рдлрд╝реЙрд▓реНрдЯ, рдЕрдкреНрд░реИрд▓ 1 2018, 15:40:54)
[рдЬреАрд╕реАрд╕реА 7.3.0] рд▓рд┐рдирдХреНрд╕ рдкрд░
рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП "рд╕рд╣рд╛рдпрддрд╛", "рдХреЙрдкреАрд░рд╛рдЗрдЯ", "рдХреНрд░реЗрдбрд┐рдЯ" рдпрд╛ "рд▓рд╛рдЗрд╕реЗрдВрд╕" рдЯрд╛рдЗрдк рдХрд░реЗрдВред

рдЖрдпрд╛рдд рдПрдирдкреАрдкреА рдХреЗ рд░реВрдк рдореЗрдВ рд╕реБрдиреНрди
np.version.version
'1.14.2'
np.min ([1, 2., 3., 4., np.nan])
рдиреЗрди
np.min ([1, 2., 3., np.nan, 4.])
рдиреЗрди
np.min ([1, 2., np.nan, 3., 4.])
рдиреЗрди
np.min ([1ред, np.nan, 2., 3., 4.]]
рдиреЗрди
np.min ([np.nan, 1., 2., 3., 4.])
рдиреЗрди
np.min ([np.nan, 1.])
рдиреЗрди
np.min ([np.nan, 1., np.nan])
рдиреЗрди
np.min ([1, np.nan])
рдиреЗрди
np.seterr (рд╕рднреА = 'рдмрдврд╝рд╛рдиреЗ')
{'рд╡рд┐рднрд╛рдЬрд┐рдд': 'рдЪреЗрддрд╛рд╡рдиреА', 'рдУрд╡рд░': 'рдЪреЗрддрд╛рд╡рдиреА', 'рдЕрдВрдбрд░': 'рдЕрдирджреЗрдЦрд╛', 'рдЕрдорд╛рдиреНрдп': 'рдЪреЗрддрд╛рд╡рдиреА'}
np.min ([np.nan, 1.0])
рдиреЗрди

рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЪреЗрддрд╛рд╡рдиреА рдХреЗ рджреЗрдЦреЗрдВ, рдЗрд╕рд▓рд┐рдП рдЬреИрд╕рд╛ рдХрд┐ рд╡рд░реНрдгрд┐рдд рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рд╣реЛ рд╕рдХрддреА рд╣реИред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдЬреЛ рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рддреА рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреНрдпреЛрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдкрд╛рдЗрдк рдХреЗ рд╕рд╛рде рд╕реБрдиреНрдиред рдЗрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХреИрд╕реЗ рд╣реБрдЖ? рдФрд░ рдХрд┐рд╕ рдЭрдВрдбреЗ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛?

рдореЗрд░реЗ рдореИрдХ рдХреЗ рд╕рд╛рде рднреА рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ:

https://hastebin.com/cuzinajero.swift

рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЗрд╕реЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ

if (c1 = n_mm_min_pd(c1, c2), py_get_floatstatus() & NPY_FPE_INVALID) {

@juliantaylor рд╡рд┐рдЪрд╛рд░?

рдпрд╛ рдФрд░ рднреА

return_nan = (c1 = n_mm_min_pd(c1, c2), py_get_floatstatus() & NPY_FPE_INVALID);
if (return_nan) {

рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдПрдХ рдЕрдиреБрдХреНрд░рдо рдмрд┐рдВрджреБ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдереНрд░реЗрдб рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рд╣рдореНрдо, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ SIMD рдХреЛрдб рдореЗрдВ рдХрд┐рддрдирд╛ рдзрд╛рдЧрд╛ рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

@VictorRodriguez рдЕрдЧрд░ рдореИрдВ рдЕрдкрдиреЗ рдореИрдХ рдкрд░ python2.7 рдХреЗ рд╕рд╛рде рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░рддрд╛ рд╣реВрдБ, рддреЛ рдпрд╣ рд╕реНрд░реЛрдд рд╕реЗ рдмрдирддрд╛ рд╣реИред рдЕрдЧрд░ рдореИрдВ python3 рдХреЗ рд╕рд╛рде рдкрд╛рдЗрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реВрдВ, рддреЛ рдпрд╣ рдПрдХ рдкрд╣рд┐рдпрд╛ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рд╣реЛрддрд╛ рд╣реИред

рдореИрдВрдиреЗ рдкрд╛рдЗрдк рдЗрдВрд╕реНрдЯрд╛рд▓ рдХрд╛ рдкреВрд░рд╛ рдЖрдЙрдЯрдкреБрдЯ рдХреИрдкреНрдЪрд░ рдХрд┐рдпрд╛: https://github.com/numpy/numpy/files/1912086/build.log

рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрд░реЛрдд (рд╡рд░реНрддрдорд╛рди рдорд╛рд╕реНрдЯрд░) рд╕реЗ рдирд┐рд░реНрдорд╛рдг рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдЬрд╛рдБрдЪ рдХреА рдХрд┐ рдмрд┐рдирд╛ рдЯреНрд╡рд┐рдХ рдХреЗ рдореИрдВ рдЕрднреА рднреА рдЯреВрдЯреЗ рд╣реБрдП рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рджреЗрдЦ рд░рд╣рд╛ рдерд╛ред рдЬрдм рдореИрдВ INSTALL.rst.txt рдореЗрдВ рд╕реБрдЭрд╛рдИ рдЧрдИ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ:
python setup.py build -j 4 install --prefix $HOME/.local

рд╕рддрд░реНрдХрддрд╛ рдХрд╛ рдПрдХ рд╢рдмреНрдж, рдпрд╣рд╛рдВ рдХреЛрдИ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ рдЙрд╕рдиреЗ рдмрдЧ рдХреЛ рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдореЗрдВ рднреА рджреЗрдЦрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд┐рдВрдбреЛрдЬрд╝ рдкрд░ рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди MSVC рдпрд╛ GCC рдХреЗ рд╕рд╛рде, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ numpy рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рд╕рдореНрдорд╛рди рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИред рд╡рд┐рдВрдбреЛрдЬрд╝ рдореЗрдВ, fpy рд░рд╛рдЬреНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП numpy _statusfp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, MSDN рдкреНрд░рд▓реЗрдЦрди рд░рд╛рдЬреНрдп:

рдХрдИ рдЧрдгрд┐рдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛рд░реНрдп рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╕реНрдЯреЗрдЯрд╕ рд╢рдмреНрдж рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреБрдХреВрд▓рди _status87, _statusfp, рдФрд░ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдЪрд╛рд▓реВ, рд╕рдВрдпреЛрдЬрд┐рдд рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдлрд╝реНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЛ рдлрд┐рд░ рд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП / Od (рдбрд┐рд╕рдПрдмрд▓ (рдбрд┐рдмрдЧ)) рдХрдВрдкрд╛рдЗрд▓рд░ рдСрдкреНрд╢рди рдпрд╛ fenv_access рдкреНрд░реИрдЧреНрдорд╛ рдбрд╛рдпрд░реЗрдХреНрдЯрд┐рд╡ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░реЗрдВред

рдЗрд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП GCC рдФрд░ MSVC (рд▓реЗрдХрд┐рди рдЕрднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдХреНрд▓реИрдЧ) рдХреЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рд╡реЗрдХ рд╣реИред

@tzickel рдХреЛ рдпрдХреАрди рд╣реИ рдХрд┐ рд╡рд┐рдВрдбреЛрдЬрд╝ рдиреЗ рдХрд╣рд╛ рдХрд┐ рдпрд╣

рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░ рдореБрдЭреЗ @charris рдХрд╛ рд╕реБрдЭрд╛рд╡ рдкрд╕рдВрдж рд╣реИ, рдпрд╣ рдорд╛рдирдХ C рд╣реИ, рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ AFAICT рдХрд┐рд╕реА рднреА рдУрд╡рд░рд╣реЗрдб рдХреЛ рдирд╣реАрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ

/* use the comma operator to prevent optimization changing the order of evaluation */
if (c1 = n_mm_min_pd(c1, c2), py_get_floatstatus() & NPY_FPE_INVALID) {

рдЬреЛ рдХрд┐ рдЕрдЬрдЧрд░ 2.7 рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рджреГрд╢реНрдп рд╕реНрдЯреВрдбрд┐рдпреЛ 8 рдХрдВрдкрд╛рдЗрд▓рд░ рджреНрд╡рд╛рд░рд╛ рднреА рд╕рдорд░реНрдерд┐рдд рд╣реИ
рджреВрд╕рд░рд╛, рдЕрдзрд┐рдХ рдХреЙрдореНрдкреИрдХреНрдЯ рд╕реБрдЭрд╛рд╡ рднреА рдмрд╣реБрдд рдЕрд╕реНрдкрд╖реНрдЯ рд▓рдЧрддрд╛ рд╣реИ

рдХреНрдпрд╛ рдХреЛрдб рдореЗрдВ рдЕрдиреНрдп рд╕реНрдерд╛рди рд╣реИрдВ рдЬреЛ рдЗрд╕ рдмрдЧ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реИрдВ?

  1. рд╕рд╛рдЗрдмрд░рд╡рд┐рди рдмрд┐рд▓реНрдб рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдЬреАрд╕реАрд╕реА рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрдЧ рдХреЛ рд▓рд┐рдирдХреНрд╕ рдирдВ рдХреА рддрд░рд╣ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП?

  2. рдпрджрд┐ рдореИрдВ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд╕рдордЭрддрд╛ рд╣реВрдВ, рддреЛ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдХреЛрдб рдкреАрдврд╝реА рдХреЗ рджреВрд╕рд░реЗ рд╕реНрддрд░ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдХрдВрдкрд╛рдЗрд▓рд░ рдЕрднреА рднреА рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рд╣реИ рдХрд┐ рджреЛрдиреЛрдВ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдЕрд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЪрд╛рд░реЛрдВ рдУрд░ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдПред рдпрд╣рд╛рдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЫреЛрдЯрд╛ рд╕рд╛ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдпрд╣ рдорд╛рдорд▓рд╛ рд╣реИ (рдЗрд╕рдХреЗ рдмрдЧрд▓ рдХреА рдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдЯрд┐рдкреНрдкрдгреА рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ), рдмрд╛рд╣рд░ рдХреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХреЗ рд╕рдВрдмрдВрдз рдореЗрдВ рдЯрдХрд╕рд╛рд▓ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ (рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ -O3 рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ), рдФрд░ рдмреАрдЪ рдореЗрдВ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ GCC рдФрд░ CLANG (рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ GCC рдЯреНрд░рдВрдХ рдореЗрдВ рдЕрднреА рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рдмрдЧ рд╣реИ :)):

https://godbolt.org/g/Zoc5xr

  1. рдпрджрд┐ рдЖрдк fenv.h рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреЛрдб рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рдЙрд╕ рдлрд╝рд╛рдЗрд▓ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ, рдореБрджреНрджреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рди рдХреНрд╖рдорддрд╛ рд╣реИред рддреЛ рдЬреЛ рдХреБрдЫ рдЙрд╕ рд╕реЗ рдХреЛрдб рдореЗрдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЙрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ numpy / core / src / npymath / / рдпрд╛рдиреА ie7575.c рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ

  2. рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдХреНрд▓реИрдВрдЧ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рдХреЛрдб рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:
    A. рдЬреАрд╕реАрд╕реА рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ (рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдореИрдХ рдкрд╣рд┐рдпреЛрдВ рдХреЛ рдХрдо рд╕реЗ рдХрдо), рдФрд░ рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдВ рдпрджрд┐ рдХреНрд▓реИрдВрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
    рдмреА рдХреНрд▓реИрдВрдЧ рдкреНрд░рддрд┐ рдлрд╝рдВрдХреНрд╢рди рдСрдкреНрдЯреЛрди рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рдХреНрд▓реИрдЧ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╕рднреА рдЕрдиреБрдХреВрд▓рди (рдзреАрдореЗ рд▓реЗрдХрд┐рди рд╕рд╣реА рдХреЛрдб) рдХреЛ рдирд┐рд╖реНрдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдкрд░ рдЫрд┐рдбрд╝рдХрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:
    https://clang.llvm.org/docs/AttributeReference.html#optnone -clang-optnone-clang-optnone

рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ - ; рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдЕрдиреБрдХреНрд░рдо рдмрд┐рдВрджреБ рд╣реИред

@ eric-wieser рдХреНрдпрд╛ рдЖрдк рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рд╣реИрдВ? рдореБрдЭреЗ рдЕрдиреБрдХреНрд░рдо рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз ; рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрддреЗ рд╣реИрдВред https://msdn.microsoft.com/en-us/library/azk8zbxd.aspx

рдХрд┐рд╕реА рднреА рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЬрд┐рд╕ рдХреНрд░рдо рдореЗрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░ рдХреЗ рддрд░реНрдХреЛрдВ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕рдХреА рдЧрд╛рд░рдВрдЯреА рджреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рдХрд┐ ; рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдмрдпрд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдирд╣реАрдВ рд╣реИ;

@charris рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рд╕реБрдЭрд╛рдП рдЧрдП рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ:

diff --git a/numpy/core/src/umath/simd.inc.src b/numpy/core/src/umath/simd.inc.src
index 2241414ac..8345e3ef7 100644
--- a/numpy/core/src/umath/simd.inc.src
+++ b/numpy/core/src/umath/simd.inc.src
@@ -1038,9 +1038,8 @@ sse2_@kind@_@TYPE@(@type@ * ip, @type@ * op, const npy_intp n)
             c1 = @vpre@_@VOP@_@vsuf@(c1, v1);
             c2 = @vpre@_@VOP@_@vsuf@(c2, v2);
         }
-        c1 = @vpre@_@VOP@_@vsuf@(c1, c2);

-        if (npy_get_floatstatus() & NPY_FPE_INVALID) {
+        if (c1 = @vpre@_@VOP@_@vsuf@(c1, c2), npy_get_floatstatus() & NPY_FPE_INVALID) {
             *op = @nan@;
         }
         else {

рдПрдирдмреА рдХрд┐ рдкрд░рд┐рд╡рд░реНрддрдирд╢реАрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЪрд░ рдХреЛ рдЪрд┐рд╣реНрдирд┐рдд рдХрд░рддрд╛ рд╣реИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдареАрдХ рдХрд░рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдк рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рдЖрдЬрд╝рдорд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдореБрдЭреЗ рдмрддрд╛рдПрдВред

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд▓реНрдкрдирд╛ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдХрдо рд╕реЗ рдХрдо рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдХрд▓реНрдкрдирд╛ рдХреЛ рд╕рдордЭрддреЗ рд╣реИрдВред рд╕рдВрдХрд▓рдХ рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди volatile рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рднрдВрдЧреБрд░ рд▓рдЧрддрд╛ рд╣реИред

рдЦреИрд░, рдЬреАрд╕реАрд╕реА 8.1 рдХреЛ рдЕрднреА рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдФрд░ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ рдХрд┐ ... рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде рдЬреАрд╕реАрд╕реА рдЕрдм рд╡рд╣реА рдореБрджреНрджрд╛ рдкреИрджрд╛ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдпрд╣рд╛рдВ рдХреНрд▓реЗрдВрдЧ рдХрд░рддрд╛ рд╣реИ https://github.com/numpy/numpy/issues/10370#issuecomment -384154230 (рдФрд░ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЙрдореНрдореАрдж рдХреЗ рдореБрддрд╛рдмрд┐рдХ рдорджрдж рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдЕрд╕реНрдерд┐рд░ рдХрд░рддрд╛ рд╣реИ), рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдбрд┐рд╕реНрдЯрд┐рд▓реНрдЯреНрд╕ рдЬреАрд╕реА рдЭрдВрдбреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕реЗ рдХрдо рдХрд░рддреЗ рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд╣реАрдВред

рдпрд╣рд╛рдБ GCC 8.1 рдкрд░ рдХреЛрдб рд╣реИ (рдЖрдк 7.3 рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд╣рд╛рдБ рдпрд╣ рдареАрдХ рд╣реИ):
https://godbolt.org/g/AJRdRQ

рд╡рд╣рд╛рдБ minpd рдФрд░ asm рдореЗрдВ npy_get_floatstatus рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЦреЛрдЬреЗрдВред

рдЖрдЗрдП рдХреБрдЫ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рд╛рде рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЕрд╕реНрдерд┐рд░рддрд╛ рдХреЗ рд╕рд╛рде рдЪрд▓реЗрдВ, рдЬреЛ рдпрджрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рддреЛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рдЕрдиреНрдп рд╡рд┐рдХрд▓реНрдк рдЬрд┐рд╕реЗ рд╣рдо рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рд╡рд╣ рдПрдХ рдЕрд▓рдЧ рдХрд╛рд░реНрдп рд╣реИ рдЬрд╣рд╛рдБ рд╣рдо рдЕрд╕реНрдерд┐рд░ рдпрд╛ рд╕рдВрдХрд▓рдХ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкреНрд░рдмрдВрдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЬрдЧрд╣ рдкрд░ рд╣реИред

рдпрд╣ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдореБрджреНрджреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рдмрдбрд╝рд╛ рдорд╛рдорд▓рд╛ рд╣реИред Ieee754.c рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд╕рднреА рд╕реБрдиреНрди рдХреЛрдб рдХреЛ рдСрдбрд┐рдЯ рдФрд░ рдлрд┐рдХреНрд╕реНрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред (рд╢рд╛рдпрдж рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд╛рдо рджреЗрдВ, рдпрд╛ рдмреЗрд╣рддрд░ рдЕрднреА рддрдХ, рдПрдХ рдирдпрд╛ рдореБрджреНрджрд╛ рдЦреЛрд▓реЗрдВ)ред

рдЯрдХрд╕рд╛рд▓ рдирд┐рд░реНрджреЗрд╢ рдХрд╛ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ https://github.com/numpy/numpy/issues/10370#issuecomment -381241813 рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

рдпрджрд┐ рдЗрд╕ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ рдПрдХ рдорд╛рди рдПрдХ NaN (SNaN рдпрд╛ QNaN) рд╣реИ, рддреЛ рджреВрд╕рд░рд╛ рдСрдкрд░реЗрдВрдб (рд╕реНрд░реЛрдд рдСрдкрд░реЗрдВрдб), рдпрд╛ рддреЛ NaN рдпрд╛ рдПрдХ рд╡реИрдз рдлреНрд▓реЛрдЯрд┐рдВрдЧ-рдкреЙрдЗрдВрдЯ рд╡реИрд▓реНрдпреВ, рдкрд░рд┐рдгрд╛рдо рдХреЛ рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред

рджреЗрдЦреЗрдВ: http://www.felixcloutier.com/x86/MINPD.html

@mattkretz рдРрд╕рд╛ рдирд╣реАрдВ рд▓рдЧрддрд╛ рд╣реИред (рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд рд╣реИ рдФрд░ рдпрд╣ рдЬрд╛рдБрдЪ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрдпреЛрдВ рд╣реИ)ред

@tzickel рдЙрддреНрд╕реБрдХрддрд╛ рд╕реЗ рдмрд╛рд╣рд░, рд╕рдорд╕реНрдпрд╛ рдХреЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдХрд┐рд╕ рд╕реНрддрд░ рдкрд░ рд╕рдорд╕реНрдпрд╛ рдЖрддреА рд╣реИ? рд╣рдо рдЕрдкрдиреЗ рдЖрдк рдХреЛ -O2 рддрдХ рд╕реАрдорд┐рдд рдХрд░рддреЗ рдереЗ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо -O3 рдпрд╛ рд╕рдордХрдХреНрд╖ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред

рдЗрд╕ gcc рдмрдЧ рдХреЗ рд╕рдорд╛рди, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=6065

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ #pragma STDC FENV_ACCESS ON рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рд╣реА рд╕рдорд╛рдзрд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП C99 рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рдЕрдЬрдЧрд░ рдХреЛ 2.7 рдЫреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╢рд╛рдпрдж GCC --std=c90 рдореЛрдб рдпрд╣ рдорд╛рди рд░рд╣рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдкреНрд░рд╣рд╕рди рдЕрдиреБрдкрд╕реНрдерд┐рдд рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ

рдЕрдкрдиреЗ рд╕рднреА рд╕рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рдкрд░ рдЬрд╛рдПрдВ:

https://godbolt.org/g/AJRdRQ (* рдпрд╣ рд╕рд╛рдЭрд╛ рд▓рдЧрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдирдкреБрдЯ рдХреЛ рдПрдХ рдирдИ рд╡рд┐рдВрдбреЛ рдореЗрдВ рдХреЙрдкреА рдХрд░реЗрдВ)

рдФрд░ рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг, рд╕рдВрдХрд▓рдХ рдЭрдВрдбреЗ рдФрд░ рдХреЛрдб рдХреЛ рдмрджрд▓рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рдФрд░ рдордХреНрдЦреА рдкрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрдЦрдХрд░ ...

рдпрд╣ рддрдм рд╣реЛрддрд╛ рд╣реИ рдЬрдм рджреЛрдиреЛрдВ рд▓реЗрдЯреЗрд╕реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░ рдкрд░ рднреА -O1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред # рдкреНрд░рдкрдорд╛ рдХреЛ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓рдЧрддрд╛ ...ред

рд╡рд╣ рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реИ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреЛрдбрд╛рдВрддрд░рдХ рд╣реИ рдФрд░ рдХреЛрдб рдХреЛрдб рдХреЛ рдХреЛрдбрд╛рдВрддрд░рдХ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдирд╛ рдХрдард┐рди рд╣реИред рдореВрд▓ рд╕рдВрд╕реНрдХрд░рдг рдмрд╣реБрдд рд╕рд░рд▓ рдерд╛ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдзреНрд╡рд╕реНрдд рднреА рдХрд┐рдпрд╛ред

рдкреАрдЖрд░ рднреА рджреЗрдЦреЗрдВ

рд╣рдореНрдо .... рдХреНрдпрд╛ рдХреЛрдИ рдореБрдЭреЗ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рдУрдПрд╕ / рд╕рдВрдХрд▓рдХ рдХреЛ рд╕реБрдиреНрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣рд╛рдВ (рдЫрд┐рдкрдХрд░) рдПрдХ рдФрд░ (рд╕рдВрдмрдВрдзрд┐рдд) рдореБрджреНрджрд╛ рднреА рдЫрд┐рдкрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

@tzickel рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ ubuntu рднрд░реЛрд╕реЗрдордВрдж рд╕рдВрдХрд▓рдХ gcc 4.8 рд╣реИ, рдореИрдВ рдирд╣реАрдВ рджреЗрдЦ рд╕рдХрддрд╛ рдХрд┐ рдХреБрдЫ рдФрд░ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

@charris рдорд╛рдЗрд▓рд┐рдирдХреНрд╕ рдХрдВрдЯреЗрдирд░ рдЬреАрд╕реАрд╕реА 4.2 рд╕реНрдерд╛рдкрд┐рдд рдХреЗ рд╕рд╛рде рд╕реЗрдВрдЯреЛрд╕ 5 рдЪрд▓рд╛рддрд╛ рд╣реИред

@ngoldbaum рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рд╣рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдкрд╛рдпрдерди 3.7 рдХреЗ рд▓рд┐рдП рдкрд╣рд┐рдпреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпрд╛ рдпрд╣ рдЯреНрд░реИрд╡рд┐рд╕.рдорд╛рдЗрд▓ рдмрд┐рд▓реНрдб рдореИрдЯреНрд░рд┐рдХреНрд╕ рдореЗрдВ MB_PYTHON_VERSION=3.7 рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдЬреЛрдбрд╝рдиреЗ рдЬрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдорд╛рдЗрд▓рд┐рдирдХреНрд╕ рдЯреВрд▓реАрдВрдЧ рдЕрдкрдбреЗрдЯ рди рд╣реЛ рдЬрд╛рдПред Python3.6 рдХреЗ IIRC рд╕реЗ рдмрд╛рд╣рд░ рдЖрдиреЗ рдХреЗ рдХреБрдЫ рд╣рдлрд╝реНрддреЛрдВ рдмрд╛рдж, рдпрд╣ рд╣реБрдЖред @njsmith рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЬрд╛рдирддрд╛ рд╣реИред

@ngoldbaum рдиреЗ gcc 4.2 рдХрд╛ рд╡рд┐рдХрд▓реНрдк рдХреНрдпрд╛ рджрд┐рдпрд╛? рдХреНрдпрд╛ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЕрдЧрд░ рд╣рдо рдЗрддрдиреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ?

рдХреНрдпрд╛ рд╣реИ рдЬреАрд╕реАрд╕реА 4.2 рдХрд╛ рд╡рд┐рдХрд▓реНрдк?

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рд▓рдХреНрд╖реНрдп рдПрдХ рдРрд╕реА рдЪрдордХ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛ рдЬреЛ рдХрд╛рдлреА рдкреБрд░рд╛рдирд╛ рд╣реИ рдХрд┐ рдмрд╛рдЗрдирд░реА рд╕рдВрдЧрддрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреА

рдХреНрдпрд╛ рд╣рдо рдмрд╛рдж рдореЗрдВ рд╕рдВрдХрд▓рдХ рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдЕрдЧрд░ рд╣рдо рдЗрддрдиреА рдЗрдЪреНрдЫрд╛ рд░рдЦрддреЗ рд╣реИрдВ?

рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ред рдореБрдЭреЗ рдпрд╣ рднреА рдкрддрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдкрд╣рд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рд╕реБрдиреНрди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореИрдереНрдпреВ рдмреНрд░реЗрдЯ рдХреА рдмрд╣реБрдЙрджреНрджреЗрд╢реАрдп рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореБрдЭреЗ рдЕрдкрдиреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЕрдЬрдЧрд░ 3.7 рдкрд╣рд┐рдпреЛрдВ рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рд╣реЛрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред

рдареАрдХ рд╣реИ, рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдВрддрд┐рдо рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЙрд╕ SSE рдХреЛрдб рдореЗрдВ рдПрдХ рдФрд░ рдореБрджреНрджрд╛ рдорд┐рд▓ рдЧрдпрд╛ рд╣реИ:

рдЕрдЧрд░ рдХреЛрдИ FP рдЧрд▓рддрд┐рдпрд╛рдБ рд╣реЛ рддреЛ рд░рдирдЯрд╛рдЗрдо рдЪреЗрддрд╛рд╡рдирд┐рдпреЛрдВ рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреЗ рд▓рд┐рдП 1.14.0 рдЕрдВрдХреЛрдВ рдореЗрдВ рдХреБрдЫ рдХреЛрдб рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛:
https://github.com/numpy/numpy/commit/d47ca7b26172c42b01c3132d0e46e70578c8ea21

рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдПрд╕рдПрд╕рдИ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдлрд┐рд░ рд╕реЗ рджреЗрдЦреЗрдВ:
https://github.com/numpy/numpy/blob/d7d5cb3feccc1fc6cf57159e8b9fe0a733968706/numpy/core/src/umath/simd.inc.src#L1020

рд╣рдо рдпрд╣ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ FPU рдХреЗрд╡рд▓ рд╕рд░рдгреА рдХреЗ рдордзреНрдп рд╕рдВрд░реЗрдЦрд┐рдд рднрд╛рдЧ, рд╣реЗрдбрд░ рдФрд░ рдЯреНрд░реЗрд▓рд░ (рдЬреЛ SSEable рдХрд╛рд░рдг рд╡реЗ рд╕реНрдореГрддрд┐ рд╕рдВрд░реЗрдЦрд┐рдд рдирд╣реАрдВ рд╣реИрдВ) рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧреБрдЬрд░рддреА рд╣реИрдВ, рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ NaN рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХреА рдЬрд╛рддреА рд╣реИрдВ рдФрд░ SSU рдХреЗ рджреМрд░рд╛рди рдирд╣реАрдВ рдЬрд╛рддреА рд╣реИрдВред рднрд╛рдЧреЛрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреЗрд╡рд▓ рдордзреНрдп рднрд╛рдЧ рдПрдХ NaN рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛, рдЬрдмрдХрд┐ рдЕрдиреНрдп (рдЬрдмрдХрд┐ рдЗрдирдкреБрдЯ рдореЗрдВ рд╕рдорд╛рди рдФрд░ ouput рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдХреНрдпрд╛ рд╡рд╣ рдареАрдХ рд╣реИ ?

np.min ([1, np.nan, 1, 1, 1, 1, 1, 1]) рдПрдХ рд░рдирд╡реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛
рд▓реЗрдХрд┐рди np.min ([1, 1, np.nan, 1, 1, 1, 1, 1]) рдХрд░рддрд╛ рд╣реИред

np.min ([1, np.nan, 1, 1, 1, 1, 1, 1]) рдПрдХ рд░рдирд╡реЗ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдЯреНрд░рд┐рдЧрд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛

@tzickel рдпрд╣ #

рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рд╕реНрд╡рд░реВрдкрдг

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХрд╛ рдореБрджреНрджрд╛ # 8954 рдерд╛, рдЬрд┐рд╕рдХреЗ рдХрд╛рд░рдг рдкреАрдЖрд░ # 9020 рд╣реЛ рдЧрдпрд╛

рд╣рд╛рдВ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рдХрд╣рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ # 9020 рд╕рднреА рд╕рдВрднрд╛рд╡рд┐рдд рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рдПрд╕рдПрд╕рдИ рдХреЛрдб рд╣реИ (рдЬреЛ рдХреБрдЫ рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрдВрддреНрд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ)ред

# 11029 рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣ рднреА рдЬрд╛рдирдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдХрд┐ рдпрд╣рд╛рдБ рдФрд░ рд╡рд╣рд╛рдБ рджреЛрдиреЛрдВ рдкреЛрд╕реНрдЯреЛрдВ рдореЗрдВ, NaN рдкреНрд░рдЪрд╛рд░ рдмрдЧ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрднреА-рдХрднреА рдЪреЗрддрд╛рд╡рдиреА рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ рдФрд░ рдХрднреА-рдХрднреА рд╡реЗ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ

рдПрдХ рдЕрдиреНрдп рдкреНрд░рд╢реНрди, рдпрджрд┐ NaN рдЗрдирдкреБрдЯ рдореЗрдВ рдореМрдЬреВрдж рд╣реИ, рддреЛ рджреЛрдиреЛрдВ рдорд┐рдирдЯ / рдЕрдзрд┐рдХрддрдо рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╣реИ, рдФрд░ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА isnan / рдЕрдорд╛рдиреНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдХреНрдпрд╛ рдпрд╣ NaN рдХреЗ рдкрд╣рд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рдкрд░ рддреЗрдЬреА рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП?

@tzickel рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдХрдореА рдСрдкрд░реЗрд╢рди рдЬрд▓реНрджреА рдмрд╛рд╣рд░ рдирд╣реАрдВ рдирд┐рдХрд▓реЗред рд╡реЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЕрдЧрд░ рд╡реЗ gufuncs рдХреЗ рд░реВрдк рдореЗрдВ refactored рдорд┐рд▓рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

Levstyle picture Levstyle  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

manuels picture manuels  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

keithbriggs picture keithbriggs  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

dmvianna picture dmvianna  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

toddrjen picture toddrjen  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ