Numpy: ダックã‚ĸãƒŦイåŧˇåˆļぎã‚ĩポãƒŧト

äŊœæˆæ—Ĩ 2019åš´06月25æ—Ĩ  Âˇ  55ã‚ŗãƒĄãƒŗト  Âˇ  ã‚Ŋãƒŧã‚š: numpy/numpy

å•éĄŒãŽ@ shoyer 、 @ pentschev 、およãŗ@mrocklinã¨ãŽčŠąã—åˆã„ãŽåžŒã§ã€ã“ãŽå•éĄŒã‚’é–‹ããžã™īŧˆhttps://github.com/dask/dask/issues/4883īŧ‰ã€‚ AIUIこれはNEP22

さぞざぞãĒダã‚Ļãƒŗ゚トãƒĒãƒŧム配列ナイブナãƒĒãĢ、ã‚ĸヒãƒĢ配列īŧˆ ndarray īŧ‰ãŒã‚ることをįĸēčĒã™ã‚‹é–ĸ数があるとäžŋ刊です。 これはnp.asanyarrayãĢいくらかäŧŧãĻいぞすが、ã‚ĩブクナ゚化ぎčĻäģļはありぞせん。 これãĢより、ナイブナãƒĒはį‹Ŧč‡Ēぎīŧˆãƒ€ãƒƒã‚¯īŧ‰é…åˆ—åž‹ã‚’čŋ”すことができぞす。 ã‚Ēブジェクトで遊切ãĒ変換がã‚ĩポãƒŧトされãĻいãĒい場合は、フりãƒŧãƒĢバックしãĻndarrayã‚ĩブクナ゚、 ndarray s、およãŗそぎäģ–ぎもぎīŧˆãƒã‚šãƒˆã•ã‚ŒãŸãƒĒ゚トīŧ‰ãŽndarrayぎåŧˇåˆļをå‡Ļį†ã§ããžã™ã€‚

cc @njsmith īŧˆNEP 22ã‚’å…ąč‘—īŧ‰

01 - Enhancement numpy.core

æœ€ã‚‚å‚č€ƒãĢãĒるã‚ŗãƒĄãƒŗト

多分quack_array :)

全ãĻぎã‚ŗãƒĄãƒŗト55äģļ

ææĄˆã•ã‚ŒãŸåŽŸčŖ…はæŦĄãŽã‚ˆã†ãĢãĒりぞす。

import numpy as np

# hypothetical np.duckarray() function
def duckarray(array_like):
  if hasattr(array_like, '__duckarray__'):
    # return an object that can be substituted for np.ndarray
    return array_like.__duckarray__()
  return np.asarray(array_like)

äŊŋį”¨äž‹īŧš

class SparseArray:
  def __duckarray__(self):
    return self
  def __array__(self):
    raise TypeError

np.duckarray(SparseArray())  # returns a SparseArray object
np.array(SparseArray())  # raises TypeError

ここでは、プãƒŦãƒŧ゚ホãƒĢダãƒŧとしãĻnp.duckarrayと__duckarray__をäŊŋį”¨ã—ぞしたが、これらぎ名前ぎ斚がおそらくうぞくいく可čƒŊ性がありぞす。 NEP22ぎį”¨čĒžã‚’参į…§ã—ãĻください。

「ダック配列」はäģŠãŽã¨ã“ろプãƒŦãƒŧ゚ホãƒĢダãƒŧとしãĻã¯å•éĄŒãĒく抟čƒŊしぞすが、かãĒり専門į”¨čĒžã§ã‚り、新しいãƒĻãƒŧã‚ļãƒŧã‚’æˇˇäšąã•ã›ã‚‹å¯čƒŊ性があるため、原際ぎAPIé–ĸ数į”¨ãĢåˆĨぎもぎを選択することをお勧めしぞす。 掋åŋĩãĒがら、「配列ぎようãĒ」は「配列ãĢåŧˇåˆļできるもぎ」īŧˆãƒĒ゚トã‚ĒブジェクトãĒおをåĢむīŧ‰ãŽæĻ‚åŋĩãĢすでãĢæŽĄį”¨ã•ã‚ŒãĻおり、「anyarray」は「ndarrayぎ原čŖ…ã‚’å…ąæœ‰ã™ã‚‹ã‚‚ãŽã€ãŽæĻ‚åŋĩãĢすでãĢæŽĄį”¨ã•ã‚ŒãĻいぞすが、 「į•°ãĒるã‚ģマãƒŗテã‚Ŗク゚がありぞす」。これは、ダック配列ぎ反寞ですīŧˆãŸã¨ãˆã°ã€np.matrixは「anyarray」ですが、「ダック配列」ではありぞせんīŧ‰ã€‚ これは古典įš„ãĒč‡ĒčģĸčģŠå°åą‹ãĒぎで、äģŠãŽã¨ã“ろは「ダックã‚ĸãƒŦイ」をäŊŋį”¨ã—ãĻいぞす。 ãŸã ã—ã€č€ƒãˆã‚‰ã‚Œã‚‹ã‚Ēãƒ—ã‚ˇãƒ§ãƒŗãĢは、arrayish、pseudoarray、nominalarray、ersatzarray、arraymimic、â€ĻãĒおがありぞす。

äģ–ぎ名前ぎã‚ĸイデã‚ĸīŧš np.array_compatible() 、 np.array_api() ...。

np.array_compatibleは抟čƒŊする可čƒŊ性がありぞすが、 duckarrayよりも気ãĢå…ĨãŖãĻいるかおうかはわかりぞせん。 np.array_apiį§ã¯åĨŊきではありぞせん、間違ãŖãŸč€ƒãˆã‚’į§čĻ‹ãĢ与えぞす。

䚅しãļりãĢいい名前がå‡ēãĻこãĒかãŖたぎで、「ã‚ĸヒãƒĢぎ配列」という名前をįĨįĻã—たãģうがいいかもâ€Ļâ€Ļ。

į§ã¯äē’換性ぎある単čĒžãŒåĨŊãã§ã™ã€‚ãŠãã‚‰ãã€ããŽčĄŒãĢæ˛ŋãŖたバãƒĒエãƒŧã‚ˇãƒ§ãƒŗã‚‚č€ƒãˆã‚‰ã‚Œãžã™as_compatible_array īŧˆäē’換性ぎあるすずãĻぎã‚Ēブジェクトが配列であることを意å‘ŗしぞすīŧ‰ã€‚ asはおそらくį…Šã‚ã—いもぎですīŧˆä¸€éƒ¨ã€ã™ãšãĻぎasé–ĸ数ãĢ゚ペãƒŧ゚がãĒいためīŧ‰ã€‚ 「ã‚ĸヒãƒĢ」はå›ŗ書館ではいいようãĢčĻ‹ãˆãžã™ãŒã€ãƒŠãƒŗダムãĒäēēがそれをčĻ‹ã‚‹ãŽã¯å°‘しåĨ‡åĻ™ã ã¨æ€ã„ぞす。 したがãŖãĻ、「ダック」は、ダã‚Ļãƒŗ゚トãƒĒãƒŧムãƒĻãƒŧã‚ļãƒŧãĢé ģįšãĢäŊŋį”¨ã—ãĻもらいたい場合ãĢぎãŋīŧˆã¤ãžã‚Šã€č‡Ē分į”¨ãŽå°ã•ãĒツãƒŧãƒĢや小さãĒナボを書き始めた場合でもīŧ‰åĢŒã„だと思いぞす。

多分quack_array :)

こぎトピックãĢついãĻ少しčŠŗしくčĒŦ明すると、 np.duckarrayでã‚ĢバãƒŧされãĻいãĒいもう1ã¤ãŽã‚ąãƒŧ゚がありぞす。これは、 np.empty_likeãĒおぎé–ĸ数と同様ãĢ、æ—ĸ存ぎ型ãĢåŸēãĨく型で新しい配列をäŊœæˆã™ã‚‹ã“とです。

>>> import numpy as np, cupy as cp
>>> a  = cp.array([1, 2])
>>> b = np.ones_like(a)
>>> type(b)
<class 'cupy.core.core.ndarray'>

一斚、NumPyぎAPIをäģ‹ã—ãĻCuPy配列をäŊœæˆã—たいarray_likeある場合、それは不可čƒŊです。 æŦĄãŽã‚ˆã†ãĒもぎがあるとäžŋ刊だと思いぞす。

import numpy as np, cupy as cp
a  = cp.array([1, 2])
b = [1, 2]
c = np.asarray(b, like=a)

これãĢé–ĸするã‚ĸイデã‚ĸ/ææĄˆã¯ã‚ã‚Šãžã™ã‹īŧŸ

多分np.copy_likeīŧŸ おぎプロパテã‚Ŗをæŗ¨æ„æˇąãåŽšįžŠã—たいと思いぞす
īŧˆãŸã¨ãˆã°ã€dtypeをåĢむかおうかīŧ‰äģ–ぎ配列からã‚ŗピãƒŧされぞす。

2019åš´7月1æ—Ĩ月曜æ—Ĩ午前5時40分PeterAndreas Entschev <
[email protected]>書きčžŧãŋīŧš

こぎトピックãĢついãĻ少しčŠŗしくčĒŦ明すると、ã‚ĢバãƒŧされãĻいãĒã„ã‚ąãƒŧ゚がもう1つありぞす。
np.duckarrayをäŊŋį”¨ã—ぞす。これは、ã‚ŋイプベãƒŧ゚ぎ新しい配列ぎäŊœæˆã§ã™ã€‚
np.empty_likeãĒおぎé–ĸæ•°ãŒåŽŸčĄŒã™ã‚‹ãŽã¨åŒæ§˜ãĢ、æ—ĸ存ぎ型で。
įžåœ¨ã€æŦĄãŽã‚ˆã†ãĒことができぞす。

numpyをnpとしãĻ、cupyをcpとしãĻイãƒŗポãƒŧト>>> a = cp.arrayīŧˆ[1、2]īŧ‰>>> b = np.ones_likeīŧˆaīŧ‰>>> typeīŧˆbīŧ‰

一斚、äŊœæˆã—たいarray_likeがある場合
NumPyぎAPIをäģ‹ã—たCuPy配列、それは不可čƒŊです。 į§ã¯ãã‚ŒãŒ
æŦĄãŽã‚ˆã†ãĒもぎがあるとäžŋ刊ですīŧš

numpyをnpとしãĻ、cupyをcpとしãĻイãƒŗポãƒŧトしぞす
a = cp.arrayīŧˆ[1、2]īŧ‰
b = [1、2]
c = np.asarrayīŧˆb、like = aīŧ‰

これãĢé–ĸするã‚ĸイデã‚ĸ/ææĄˆã¯ã‚ã‚Šãžã™ã‹īŧŸ

—
あãĒãŸãŒč¨€åŠã•ã‚ŒãŸãŽã§ã‚ãĒたはこれを受け取ãŖãĻいぞす。
ã“ãŽãƒĄãƒŧãƒĢãĢį›´æŽĨčŋ”äŋĄã—、GitHubã§čĄ¨į¤ēしãĻください
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVRCWDHRAXHHRDHXXM3P5H3LRA5CNFSM4H3HQWAKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW
ぞたぱãƒŦッドをミãƒĨãƒŧトしぞす
https://github.com/notifications/unsubscribe-auth/AAJJFVRSYHUYHMPWQTW2NLLP5H3LRANCNFSM4H3HQWAA
。

np.copy_likeもいいですね。 į§ã¯åŒæ„ã—ぞす、į§ãŸãĄã¯ãŠãã‚‰ãdtypeようãĒもぎをåˆļåžĄã™ã‚‹æ–šæŗ•ã‚’持ãŖãĻいるずきです。

初åŋƒč€…ぎčŗĒ問でį”ŗしč¨ŗありぞせんが、 np.copy_likeようãĒもぎをNEP-22ぎäŋŽæ­ŖãĢするåŋ…čĻãŒã‚ã‚Šãžã™ã‹ã€ãã‚Œã‚’ãƒĄãƒŧãƒĒãƒŗグãƒĒã‚šãƒˆã§č­°čĢ–するåŋ…čĻãŒã‚りぞすか、それともそれãĢ寞する最も遊切ãĒã‚ĸプロãƒŧチはäŊ•ã§ã—ょうかīŧŸ

これãĢついãĻåŽŗ密ãĒãƒĢãƒŧãƒĢはありぞせんが、 np.copy_likeとnp.duckarray īŧˆãžãŸã¯į§ãŸãĄãŒå‘ŧんでいるもぎīŧ‰ã‚’įĩ„ãŋ合わせãĻ、ã‚ĸヒãƒĢぎ配列をåŧˇåˆļ/äŊœæˆã™ã‚‹æ–°ã—いNEPをäŊœæˆã™ã‚‹ã“とãĢ傞倒しぞす。これは、NEP 22ぎようãĒã€Œæƒ…å ąã€ã§ã¯ãĒく、NEP 18ぎようãĢčĻį¯„įš„ã§ã™ã€‚é•ˇãã™ã‚‹åŋ…čĻã¯ã‚りぞせん。ãģとんおぎ動抟は、NEP18 / 22を参į…§ã™ã‚‹ã“とですでãĢ明らかです。

į´„ノãƒŧトnp.copy_like() īŧšãã‚Œã¯é–“違いで洞éŖčĄŒã†åŋ…čĻãŒã‚りぞす__array_function__ぎようãĢ操äŊœã—ãĻ、īŧˆãžãŸã¯ãã‚ŒãŽã‚ˆã†ãĒもぎīŧ‰ np.copy_like(sparse_array, like=dask_array)いずれかぎ配列型ぎいずれかで厚įžŠã™ã‚‹ã“とができぞす。

æƒ…å ąã‚’ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ãžã™ã€‚į™ēé€ãŽææĄˆãĢ同意しぞす。 np.duckarrayとnp.copy_likeãŽä¸Ąæ–šã‚’åŽŸčŖ…するためぎNEPãĢ取りįĩ„ãŋ、äģŠé€ąã¯ããŽãŸã‚ãŽãƒ‰ãƒŠãƒ•ãƒˆPRを提å‡ēしぞす。

į´ æ™´ã‚‰ã—い、ありがとうピãƒŧã‚ŋãƒŧīŧ

2019åš´7月1æ—Ĩ月曜æ—Ĩ午前9時29分PeterAndreas Entschev <
[email protected]>書きčžŧãŋīŧš

æƒ…å ąã‚’ã‚ã‚ŠãŒã¨ã†ã”ã–ã„ãžã™ã€‚į™ēé€ãŽææĄˆãĢ同意しぞす。 į§
np.duckarrayã¨ãŽä¸Ąæ–šã‚’åŽŸčŖ…するためぎNEPで動äŊœã—ぞす
np.copy_likeし、そぎためãĢäģŠé€ąãƒ‰ãƒŠãƒ•ãƒˆPRを提å‡ēしãĻください。

—
あãĒãŸãŒč¨€åŠã•ã‚ŒãŸãŽã§ã‚ãĒたはこれを受け取ãŖãĻいぞす。
ã“ãŽãƒĄãƒŧãƒĢãĢį›´æŽĨčŋ”äŋĄã—、GitHubã§čĄ¨į¤ēしãĻください
https://github.com/numpy/numpy/issues/13831?email_source=notifications&email_token=AAJJFVW2YUBNUCJZK6JWDBTP5IWHNA5CNFSM4H3HQWAKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKT
ぞたぱãƒŦッドをミãƒĨãƒŧトしぞす
https://github.com/notifications/unsubscribe-auth/AAJJFVR2KTPAZ4JPWDYYMFLP5IWHNANCNFSM4H3HQWAA
。

į§ãŽå–œãŗ、そしãĻこぎäģ•äē‹ãŽã‚ĸイデã‚ĸとã‚ĩポãƒŧトãĢ感čŦã—ぞすīŧ

array_likeé–ĸ数とcopy_likeé–ĸ数は、デフりãƒĢトぎ原čŖ…ã‚’č¨­åŽšã§ããĒã„ãŸã‚ã€ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢåĢめるぎは少しåĨ‡åĻ™ã ã¨æ€ã„ぞすīŧˆå°‘ãĒくとも、キãƒĨãƒŧピãƒŧ/ダ゚ク/゚パãƒŧã‚š/ãĒおīŧ‰ã€ãã†ã§ã™ã‹īŧŸ これらは、ã‚Ēãƒŧバãƒŧナイドされた場合ãĢぎãŋåŊšįĢ‹ãĄãžã™ã€‚ ぞたは、ここでäģģ意ぎ非numpy配列ã‚ĒブジェクトをäŊœæˆã™ã‚‹æ–šæŗ•ãŒã‚りぞせんかīŧŸ

įĸēかãĢ、これらはダックã‚ŋイピãƒŗグをã‚ĩポãƒŧトしたい場合ãĢぎãŋæœŦåŊ“ãĢåŊšįĢ‹ãĄãžã™ã€‚ しかし、įĸēかãĢnp.duckarrayとnp.copy_likeは、åŧ•æ•°ãŒNumPy配列ぎãŋであãŖãĻも抟čƒŊしぞす。これらは、 np.array / np.copyと同į­‰ã§ã™ã€‚

すずãĻぎ配列原čŖ…ãĢはcopyãƒĄã‚ŊッドがありぞすよねīŧŸ copy_likeäģŖわりãĢそれをäŊŋį”¨ã™ã‚‹ã¨æŠŸčƒŊするはずですが、ãĒぜ新しいé–ĸ数をčŋŊ加するぎですかīŧŸ

array_likeåŋ…čĻæ€§ã¯ã‚ã‹ã‚Šãžã™ãŒã€ãŠã“ãĢįŊŽãã‹ãĢついãĻčŠąã—åˆã„ãŸã„ã¨æ€ã†ã‹ã‚‚ã—ã‚Œãžã›ã‚“ã€‚

np.duckarrayはį§ãĢはį†ãĢかãĒãŖãĻいぞす。

į§ã¯ã€np.copy_likeとnp.duckarrayīŧˆãžãŸã¯į§ãŸãĄãŒãã‚Œã‚’å‘ŧãļもぎīŧ‰ã‚’įĩ„ãŋ合わせãĻ、ã‚ĸヒãƒĢぎ配列をåŧˇåˆļ/äŊœæˆã™ã‚‹æ–°ã—いNEPãĢ傞倒しぞす。これは、NEP 22ぎようãĒã€Œæƒ…å ąã€ã§ã¯ãĒく、NEP18ぎようãĒčĻį¯„įš„ãĒもぎです。

+1

array_likeぎåŋ…čĻæ€§ã¯ã‚ã‹ã‚Šãžã™ãŒã€ãŠã“ãĢ配įŊŽã™ã‚‹ã‹ãĢついãĻčŠąã—åˆã„ãŸã„ã¨æ€ã†ã‹ã‚‚ã—ã‚Œãžã›ã‚“ã€‚

それは原際ãĢį§ãŒnp.copy_likeようãĒもぎで寞å‡Ļã—ãŸã„ã‚ąãƒŧ゚です。 į§ã¯ãƒ†ã‚šãƒˆã—ãĻいぞせんが、配列がNumPyäģĨ外ぎ場合、おそらくnp.copyすでãĢæ­Ŗしくデã‚Ŗ゚パッチされãĻいぞす。

明įĸēãĢするためãĢ、é–ĸ数np.array_likeも参į…§ã—ãĻいぞすかīŧŸ array_like配列へぎæ—ĸ存ぎすずãĻぎ参į…§ã‚’æˇˇäšąã•ã›ã‚‹å¯čƒŊæ€§ãŒã‚ã‚‹ã¨č€ƒãˆãŸãŸã‚ã€ã“ãŽã‚ˆã†ãĒ名前は意å›ŗįš„ãĢéŋけぞした。 ただし、 np.copy_likeがåŋ…čĻãĒã‚ŗピãƒŧを意å‘ŗする可čƒŊ性があることをčĒč­˜ã—ぞした。ã‚ŗピãƒŧがぞだNumPyでãĒい場合ãĢぎãŋį™ēį”Ÿã™ã‚‹ã€ np.asarrayと同様ぎ動äŊœã‚’čĄŒã†ã¨ã‚ˆã„ã¨æ€ã„ãžã™ã€‚ã‚ĸãƒŦイ。 ここでčĒŦæ˜Žã™ã‚‹ã‚ąãƒŧ゚では、 aがnp.copy_like(a, like=b)ãĒおぎå‘ŧãŗå‡ēしでbと同じã‚ŋイプでãĒい場合ãĢぎãŋ、ã‚ŗピãƒŧをäŊœæˆã™ã‚‹ãŽãŒæœ€å–„です。

į§ã¯ãƒ†ã‚šãƒˆã—ãĻいぞせんが、配列がNumPyäģĨ外ぎ場合、おそらくnp.copyすでãĢæ­Ŗしくデã‚Ŗ゚パッチされãĻいぞす。

__array_function__をã‚ĩポãƒŧトするようãĢčŖ…éŖžã•ã‚ŒãĻいるåŋ…čĻãŒã‚りぞす。

明įĸēãĢするためãĢ、é–ĸ数np.array_likeも参į…§ã—ãĻいぞすかīŧŸ array_like-arraysへぎæ—ĸ存ぎすずãĻぎ参į…§ã‚’æˇˇäšąã•ã›ã‚‹å¯čƒŊæ€§ãŒã‚ã‚‹ã¨č€ƒãˆãŸãŸã‚ã€ã“ãŽã‚ˆã†ãĒ名前は意å›ŗįš„ãĢéŋけぞした。

はい。 そしãĻã€ã¯ã„ã€ãã‚ŒãŒæˇˇäšąã™ã‚‹å¯čƒŊ性があることãĢ同意しぞす。

しかし、į§ã¯äģŠã€ np.copy_likeがåŋ…čĻãĒã‚ŗピãƒŧを意å‘ŗするかもしれãĒいことãĢ気ãĨきぞした。

はい、そぎ名前はデãƒŧã‚ŋぎã‚ŗピãƒŧを意å‘ŗしぞす。

åŋ…čĻãĒã‚ŗピãƒŧを意å‘ŗするかもしれぞせん、そしãĻį§ã¯np.asarrayようãĒæŒ¯ã‚‹čˆžã„ã‚’ã™ã‚‹ãŽãŒč‰¯ã„ã¨æ€ã„ãžã™ã€

それはnp.duckarrayだと思いぞした。

ä¸Šč¨˜ãŽãƒ”ãƒŧã‚ŋãƒŧぎ䞋は、これを明įĸēãĢするぎãĢåŊšįĢ‹ã¤ã‹ã‚‚しれãĒいと思いぞす。 äģĨ下ãĢã‚ŗピãƒŧし、į°Ąå˜ãĢするためãĢnp.copy_likeã§ä¸‹åĄ—ã‚Šã—ãžã—ãŸã€‚

import numpy as np, cupy as cp
a  = cp.array([1, 2])
b = [1, 2]
c = np.copy_like(b, like=a)

それはnp.duckarrayだと思いぞした。

原際、 np.duckarrayはåŸēæœŦįš„ãĢäŊ•ã‚‚せず、配列č‡ĒäŊ“ã‚’čŋ”すだけですīŧˆã‚ĒãƒŧバãƒŧナイドされãĻいる場合īŧ‰ã€‚それäģĨ外ぎ場合はnp.asarrayčŋ”しぞすīŧˆNumPy配列ãĢãĒりぞすīŧ‰ã€‚ たとえば、PythonãƒĒ゚トからCuPy配列を取垗することはできぞせん。 array_like CuPyīŧˆãžãŸã¯äģ–ぎlike=配列īŧ‰ãĢデã‚Ŗ゚パッチできるé–ĸ数がぞだåŋ…čĻã§ã™ã€‚

更新された䞋を@jakirkhamãĢ感čŦã—ぞす。

c = np.copy_like(b, like=a)

それで、それはa.__array_function__をäģ‹ã—ãĻCuPyãĢデã‚Ŗã‚šãƒ‘ãƒƒãƒã—ã€ããŽåąžæ€§ãŒå­˜åœ¨ã—ãĒã„å ´åˆã¯å¤ąæ•—ã—ãžã™īŧˆãŸã¨ãˆã°ã€ a=<scipy.sparse matrix>は抟čƒŊしぞせんīŧ‰īŧŸ そぎようãĒことぎためãĢ、新しい名前įŠē間ぞたは新しいį›¸äē’運į”¨æ€§ãƒĻãƒŧテã‚ŖãƒĒテã‚Ŗãƒ‘ãƒƒã‚ąãƒŧジがåŋ…čĻãĒようãĢ感じぞす。 それか、より厌全ãĒ抟čƒŊを備えた将æĨぎデã‚Ŗã‚šãƒ‘ãƒƒãƒãƒĄã‚Ģニã‚ēムãĢäģģせãĻください。

with cupy_backend:
   np.array(b)

NumPyč‡ĒäŊ“が__array_function__åˆļ限ぎ回éŋをã‚ĩポãƒŧトするぎãĢ意å‘ŗがãĒい新しいé–ĸæ•°ã‚’ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢ導å…Ĩすることは、少し不åĨåēˇãĢ思えぞす...。

それで、それはa.__array_function__をäģ‹ã—ãĻCuPyãĢデã‚Ŗã‚šãƒ‘ãƒƒãƒã—ã€ããŽåąžæ€§ãŒå­˜åœ¨ã—ãĒã„å ´åˆã¯å¤ąæ•—ã—ãžã™īŧˆãŸã¨ãˆã°ã€ a=<scipy.sparse matrix>は抟čƒŊしぞせんīŧ‰īŧŸ

åŋ…ãšã—ã‚‚å¤ąæ•—ã—ãĒければãĒらãĒã„ã¨ã¯č¨€ã„ãžã›ã‚“ã€‚ たとえば、デフりãƒĢトでNumPyをäŊŋį”¨ã—ãĻč­Ļ告をį™ēするīŧˆãžãŸã¯ãžãŖたくį™ēį”Ÿã•ã›ãĒいīŧ‰ã“とができぞす。

そぎようãĒことぎためãĢ、新しい名前įŠē間ぞたは新しいį›¸äē’運į”¨æ€§ãƒĻãƒŧテã‚ŖãƒĒテã‚Ŗãƒ‘ãƒƒã‚ąãƒŧジがåŋ…čĻãĒようãĢ感じぞす。 それか、よりフãƒĢ抟čƒŊぎ将æĨぎデã‚Ŗã‚šãƒ‘ãƒƒãƒãƒĄã‚Ģニã‚ēムãĢäģģせãĻください

įĸēかãĢ、フãƒĢ抟čƒŊぎデã‚Ŗã‚šãƒ‘ãƒƒãƒãƒĄã‚Ģニã‚ēãƒ ãŒã‚ã‚Œã°ã„ã„ãŽã§ã™ãŒã€ããŽč¤‡é›‘ã•ã¨ä¸‹äŊäē’æ›æ€§ãŽå•éĄŒãŽãŸã‚ãĢ、これはäģĨå‰ã¯čĄŒã‚ã‚ŒãĻいãĒかãŖたと思いぞすかīŧŸ čŠąã—åˆã„ãŒã‚ãŖたときは周りãĢいãĒかãŖたぎで、推æ¸Ŧするだけです。

NumPyč‡ĒäŊ“が__array_function__ぎåˆļ限ぎ回éŋをã‚ĩポãƒŧトするぎãĢ意å‘ŗぎãĒい新しいé–ĸæ•°ã‚’ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢ導å…Ĩすることは、少し不åĨåēˇãĢ思えぞす...。

įĸēかãĢあãĒたぎä¸ģåŧĩã¯ã‚ã‹ã‚Šãžã™ãŒã€ãƒĄã‚¤ãƒŗぎ名前įŠē間からé›ĸれすぎると、ãƒĻãƒŧã‚ļãƒŧを怖がらせる可čƒŊ性があると思いぞす。 多分į§ã¯é–“違ãŖãĻいãĻã€ã“ã‚Œã¯ãŸã ãŽå°čąĄã§ã™ã€‚ いずれãĢせよ、į§ã¯NumPyで動äŊœã—ãĒいé–ĸ数を原čŖ…することをぞãŖãŸãææĄˆã—ãĻいぞせんが、NumPyを単į‹ŦでäŊŋį”¨ã™ã‚‹å ´åˆã¯įĩļ寞ãĢåŋ…čĻã¨ã„うわけではありぞせん。

NumPyč‡ĒäŊ“が__array_function__ぎåˆļ限ぎ回éŋをã‚ĩポãƒŧトするぎãĢ意å‘ŗぎãĒい新しいé–ĸæ•°ã‚’ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢ導å…Ĩすることは、少し不åĨåēˇãĢ思えぞす...。

原際、こぎ意å‘ŗでは、 np.duckarrayã‚‚ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢåąžã—ãĻいぞせん。

原際、こぎ意å‘ŗでは、 np.duckarrayã‚‚ãƒĄã‚¤ãƒŗぎ名前įŠē間ãĢåąžã—ãĻいぞせん。

1ã¤ã¯ã‚ˆã‚Šé˜˛åžĄå¯čƒŊだと思いぞすīŧˆ asarray類äŧŧしãĻおり、åŸēæœŦįš„ãĢ「これはndarrayぎようãĒダックã‚ŋイプぎ厚įžŠã‚’æē€ãŸã—ãĻいぞすか」をチェックしぞすīŧ‰ãŒã€ãã†ã§ã™ã€‚ array_function_dispatchもå…Ŧ開したいが、 np.lib.mixins.NDArrayOperatorsMixinあり、さらãĢミック゚イãƒŗをäŊœæˆã™ã‚‹äēˆåŽšãŒã‚る場合は、į›¸äē’運į”¨æ€§ãĢé–ĸé€ŖするすずãĻぎもぎãĢ寞åŋœã™ã‚‹čŗĸ明ãĒ新しいã‚ĩブãƒĸジãƒĨãƒŧãƒĢがį†ãĢかãĒãŖãĻいぞす。

įĸēかãĢ、フãƒĢ抟čƒŊぎデã‚Ŗã‚šãƒ‘ãƒƒãƒãƒĄã‚Ģニã‚ēãƒ ãŒã‚ã‚Œã°ã„ã„ãŽã§ã™ãŒã€ããŽč¤‡é›‘ã•ã¨ä¸‹äŊäē’æ›æ€§ãŽå•éĄŒãŽãŸã‚ãĢ、これはäģĨå‰ã¯čĄŒã‚ã‚ŒãĻいãĒかãŖたと思いぞすかīŧŸ čŠąã—åˆã„ãŒã‚ãŖたときは周りãĢいãĒかãŖたぎで、推æ¸Ŧするだけです。

č¤‡æ•°ãŽį†į”ąãŒã‚ると思いぞす。 __array_function__はį§ãŸãĄãŒã™ã§ãĢ持ãŖãĻいたもぎとäŧŧãĻいるぎで、推čĢ–するぎはį°Ąå˜ã§ã™ã€‚ ã‚Ēãƒŧバãƒŧヘッドが少ãĒいです。 それは最大6か月ぎã‚ŋã‚¤ãƒ ã‚šã‚ąãƒŧãƒĢã§č¨­č¨ˆãŠã‚ˆãŗ原čŖ…でき、

į›¸äē’運į”¨æ€§ãĢé–ĸé€ŖするすずãĻぎもぎぎためぎčŗĸ明ãĒ新しいã‚ĩブãƒĸジãƒĨãƒŧãƒĢはį†ãĢかãĒãŖãĻいるかもしれぞせん。

į§ã‹ã‚‰ãŽæœŦåŊ“ぎį•°č­°ã¯ã‚りぞせん。おこãĢもãĒいよりもおこかãĢ抟čƒŊãŒã‚ã‚‹æ–šãŒč‰¯ã„ã¨æ€ã„ãžã™ã€‚ :)

č¤‡æ•°ãŽį†į”ąãŒã‚ると思いぞす。 __array_function__はį§ãŸãĄãŒã™ã§ãĢ持ãŖãĻいたもぎãĢäŧŧãĻいるぎで、推čĢ–するぎはį°Ąå˜ã§ã™ã€‚ ã‚Ēãƒŧバãƒŧヘッドが少ãĒいです。 それは最大6か月ぎã‚ŋã‚¤ãƒ ã‚šã‚ąãƒŧãƒĢã§č¨­č¨ˆãŠã‚ˆãŗ原čŖ…でき、

しかし、 __array_function__よりåēƒãæ´ģį”¨ã—たい場合は、 np.duckarrayやnp.copy_like īŧˆãžãŸã¯ãã‚Œã¨å‘ŧãļことãĢしたäģ–ぎäŊ•ã‹īŧ‰ãŽã‚ˆã†ãĒもぎを原čŖ…するäģ–ぎ選択č‚ĸがありぞすかīŧŸ į§ã¯ã™ãšãĻぎ選択č‚ĸを受けå…ĨれãĻã„ãžã™ãŒã€ã‚‚ãĄã‚ã‚“ã€ãƒ•ãƒĢ抟čƒŊぎデã‚Ŗ゚パッチ斚æŗ•ã‚’æŽĄį”¨ã™ã‚‹ãŽã§ã¯ãĒく、äģŠãŽã¨ã“ろäŊ•ã‚‚襨į¤ēされãĻいぞせん。これãĢã¯é•ˇã„æ™‚é–“ãŒã‹ã‹ã‚Šã€ __array_function__į¯„å›˛ãŒåˆļ限される可čƒŊ性がありぞす。

しかし、 __array_function__よりåēƒãæ´ģį”¨ã—たい場合は、 np.duckarrayやnp.copy_like īŧˆãžãŸã¯ãã‚Œã¨å‘ŧãļことãĢしたäģ–ぎäŊ•ã‹īŧ‰ãŽã‚ˆã†ãĒもぎを原čŖ…するäģ–ぎ選択č‚ĸがありぞすかīŧŸ

ãƒĻãƒŧã‚šã‚ąãƒŧ゚ぎ一部をã‚Ģバãƒŧすることから、ãƒĻãƒŧã‚šã‚ąãƒŧ゚ぎ80īŧ…ã‚’čļ…えることぞで、そぎようãĒ一é€ŖぎãƒĻãƒŧテã‚ŖãƒĒテã‚Ŗ抟čƒŊが原際ãĢåŋ…čĻã ã¨æ€ã„ぞす。 それを回éŋする斚æŗ•ã¯ãĒいと思いぞす。 ãƒĄã‚¤ãƒŗぎ名前įŠēé–“ã‚’äšąé›‘ãĢするぎはåĨŊきではãĒã„ãŽã§ã€ãã‚Œã‚‰ãŽãŸã‚ãŽã‚ˆã‚Šč‰¯ã„å ´æ‰€ã‚’čĻ‹ã¤ã‘ã‚‹ã“ã¨ã‚’ææĄˆã—ãžã™ã€‚

į§ã¯ã™ãšãĻぎ選択č‚ĸを受けå…ĨれãĻã„ãžã™ãŒã€ã‚‚ãĄã‚ã‚“ã€ãƒ•ãƒĢ抟čƒŊぎデã‚Ŗ゚パッチ斚æŗ•ã‚’æŽĄį”¨ã™ã‚‹ãŽã§ã¯ãĒく、äģŠãŽã¨ã“ろäŊ•ã‚‚襨į¤ēされãĻいぞせん。これãĢã¯é•ˇã„æ™‚é–“ãŒã‹ã‹ã‚Šã€ __array_function__į¯„å›˛ãŒåˆļ限される可čƒŊ性がありぞす。

つぞり、ここでいくつかぎ明らかãĒįŠ´ã‚’åĄžã„ã§ã„ã‚‹ã ã‘ã§ã™ã‚ˆã­īŧŸ ã€Œã‚ˆã‚Šč¤‡é›‘ãĒã‚ąãƒŧ゚」ぎすずãĻをįļ˛įž…することはæąēしãĻありぞせん。 np.errstateぞたはnp.dtypeをã‚Ēãƒŧバãƒŧナイドしたい場合、プロトã‚ŗãƒĢベãƒŧ゚ぎã‚ĸプロãƒŧチではį™ēį”Ÿã—ぞせん。

äģŖæ›ŋæĄˆãĢついãĻは、 scipy.fftをäŊœæˆã™ã‚‹ãŸã‚ãĢčŠĻしãĻãŋようとしãĻいぞす。 https īŧš

uarrayをäŊŋį”¨ã—たデã‚Ŗ゚パッチã‚ĸプロãƒŧチはįĸēかãĢ興å‘ŗæˇąã„ã‚‚ãŽã§ã™ã€‚ ãƒĄã‚ŋ配列īŧˆDask、xarrayãĒおīŧ‰ãŽå‡Ļį†æ–šæŗ•ãĢついãĻはぞだåŋƒé…ã§ã™ãŒã€‚ čŠŗį´°ã¯ã“ãĄã‚‰ãŽã‚ŗãƒĄãƒŗトをごčĻ§ãã ã•ã„。 これが寞å‡ĻされãĻいるかおうかは不明ですīŧˆãŸã ã—、äŊ•ã‹ã‚’čĻ‹é€ƒã—た場合はäŋŽæ­ŖしãĻくださいīŧ‰ã€‚ SciPyぎäģ–ぎäēēと協力しãĻã€ã“ãŽå•éĄŒã‚’ãŠãŽã‚ˆã†ãĢč§ŖæąēするかをčŠĻしãĻãŋたいと思いぞす。

čŠŗį´°ã¯ã“ãĄã‚‰ãŽã‚ŗãƒĄãƒŗトをごčĻ§ãã ã•ã„。 これが寞å‡ĻされãĻいるかおうかは不明ですīŧˆãŸã ã—、äŊ•ã‹ã‚’čĻ‹é€ƒã—た場合はäŋŽæ­ŖしãĻくださいīŧ‰ã€‚

å…ˆé€ąãŽå¤‰æ›´ã§ãã‚Œã¯č§Ŗæąēしたと思いぞすが、įĸēかではありぞせん。åˆĨぎ゚ãƒŦッドãĢ掋しぞしょう。

SciPyぎäģ–ぎäēēと協力しãĻã€ã“ãŽå•éĄŒã‚’ãŠãŽã‚ˆã†ãĢč§ŖæąēするかをčŠĻしãĻãŋたいと思いぞす。

į§ã¯ãã“ãĢいぞす、あãĒたãĢį›´æŽĨäŧšã†ãŽã¯į´ æ™´ã‚‰ã—いことです。

たãļんnp.coerce_like()ぞたはnp.cast_like()はcopy_likeã‚ˆã‚Šã‚‚č‰¯ã„åå‰ãĒぎで、ã‚ŗピãƒŧがåŋ…ずしもåŋ…čĻã§ã¯ãĒいことは明らかです。 åŋ…čĻãĒ抟čƒŊは、配列型とdtypeを変換することを除いãĻ、 .cast()ãƒĄã‚Ŋッドと非常ãĢよくäŧŧãĻã„ãžã™ã€‚ãŠãĄã‚‰ãŽåŧ•æ•°ã§ã‚‚原čŖ…できるようãĢ、プロトã‚ŗãƒĢではãĒくé–ĸ数ãĢするåŋ…čĻãŒã‚りぞす。

uarrayをäŊŋį”¨ã—たデã‚Ŗ゚パッチã‚ĸプロãƒŧチはįĸēかãĢ興å‘ŗæˇąã„ã‚‚ãŽã§ã™ã€‚ ãƒĄã‚ŋ配列īŧˆDask、xarrayãĒおīŧ‰ãŽå‡Ļį†æ–šæŗ•ãĢついãĻはぞだåŋƒé…ã§ã™ãŒã€‚

uarrayã¯č¤‡æ•°ãŽãƒãƒƒã‚¯ã‚¨ãƒŗドをã‚ĩポãƒŧトしãĻいるため、こぎようãĒもぎが抟čƒŊするはずです

with ua.set_backend(inner_array_backend), ua.set_backend(outer_array_backend):
  s = unumpy.sum(meta_array)

ã“ã‚Œã¯ã€ãƒĄã‚ŋ配列がそぎ原čŖ…内でua.skip_backendå‘ŧãŗå‡ēすようãĢã™ã‚‹ã‹ã€ãƒĄã‚ŋ配列ぎバックエãƒŗãƒ‰ãŒåž‹ãŽä¸ä¸€č‡´ã§NotImplementedをčŋ”す場合ãĢåŽŸčĄŒã§ããžã™ã€‚

ccīŧš @hameerabbasi

これãĢついãĻčŠŗしくčĒŦ明しぞす。原則としãĻ、 dask.array場合、 daをåĢむもぎはすずãĻ、skip_backendãĒしで書きčžŧぞれぞす。 NumPyをäŊŋį”¨ã™ã‚‹ã‚‚ぎãĢは、skip_backendがåŋ…čĻã§ã™ã€‚

ぞたは、 da場合は、いつでもデã‚Ŗ゚パッチを゚キップしãĻį‹Ŧč‡Ēぎ原čŖ…ã‚’į›´æŽĨå‘ŧãŗå‡ēし、おこãĢでもskip_backend(dask.array)をįŊŽãã“とができぞす。

ones 、 castようãĢ、配列がã‚ĸã‚ŋッチされãĻいãĒいé–ĸ数をデã‚Ŗ゚パッチする場合は、バックエãƒŗãƒ‰ã‚’č¨­åŽšã™ã‚‹ã ã‘ã§åŽŒäē†ã—ぞす。 np.errstateとnp.dtypeãĢついãĻも同じです。 unumpy np.ufuncをã‚Ģバãƒŧする䞋がありぞす。

å…ƒãŽå•éĄŒãĢé–ĸしãĻは、 uarrayは__ua_convert__プロトã‚ŗãƒĢを提䞛しぞす。これはぞさãĢã“ã‚Œã‚’čĄŒã„ãžã™ã€‚ åˆĨぎ斚æŗ•ã¯ã€ãƒãƒƒã‚¯ã‚¨ãƒŗドがasarrayį›´æŽĨã‚Ēãƒŧバãƒŧナイドすることです。

上ぎヘッドã‚ĸップしãĻくれãĻありがとうuarray 、@rgommers、@ peterbell10、@hameerabbasi。

しかし、į§ãŒčĻ‹ã‚‹ã‚ˆã†ãĢã€č¨ˆįŽ—を開始する前ãĢ遊切ãĒバックエãƒŗãƒ‰ã‚’č¨­åŽšã™ã‚‹åŋ…čĻãŒã‚りぞす、それはæ­ŖしいですかīŧŸ __array_function__ぎ刊į‚šãŽ1つは、ナイブナãƒĒがäģ–ぎナイブナãƒĒãĢ厌全ãĢ䞝存しãĒいことです。たとえば、DaskはCuPyぎ存在をįŸĨるåŋ…čĻãŒã‚りぞせん。

@pentschevこれは、バックエãƒŗドを「į™ģéŒ˛ã€ã™ã‚‹æŠŸčƒŊをčŋŊ加した最čŋ‘ぞで

äē†č§Ŗしぞした。これは、 https://github.com/numpy/numpy/issues/13831#issuecomment-507432311ã§č¨€åŠã—ãŸã‚‚ãŽã§ã‚ã‚Šã€ httpsīŧš //github.com/Quansight-Labs/uarrayぎバックエãƒŗドを指しãĻいぞす。 / tree / master / unumpy。

非常ãĢ多くぎčŗĒ問をしãĻį”ŗしč¨ŗありぞせんが、たとえば、NumPyとSparseãŽä¸Ąæ–šãĒお、さぞざぞãĒバックエãƒŗドãĢ䞝存しãĻいるæžļįŠēぎã‚ĸプãƒĒã‚ąãƒŧã‚ˇãƒ§ãƒŗがある場合はおうãĒりぞすか。ãƒĻãƒŧã‚ļãƒŧå…Ĩ力ãĢåŋœã˜ãĻ、すずãĻがNumPyぎãŋ、Sparseぎãŋã€ãžãŸã¯ä¸Ąæ–šãŽįĩ„ãŋ合わせãĢãĒりぞす。 @ peterbell10ã¯ã€č¤‡æ•°ãŽãƒãƒƒã‚¯ã‚¨ãƒŗドがã‚ĩポãƒŧトされãĻいるとčŋ°ãšãĻいぞすhttps://github.com/numpy/numpy/issues/13831#issuecomment -507458331ですが、バックエãƒŗドぎ選択をč‡Ē動化できぞすか、それとも3ã¤ãŽã‚ąãƒŧã‚šã‚’åˆĨ々ãĢå‡Ļį†ã™ã‚‹åŋ…čĻãŒã‚りぞすかīŧŸ

したがãŖãĻ、こぎ場合、į†æƒŗįš„ãĢはNumPyをį™ģéŒ˛ã—ã€Sparseぎã‚ŗãƒŗテキ゚トマネãƒŧジãƒŖãƒŧをäŊŋį”¨ã—、åŋ…čĻãĢåŋœã˜ãĻsparseからNotImplementedをčŋ”しぞす。これãĢより、NumPyãĢフりãƒŧãƒĢバックしぞす。

SciPy @ rgommers 、 @ danielballan 、そしãĻį§č‡ĒčēĢãŒã“ãŽå•éĄŒãĢついãĻčŠąã—ãžã—ãŸã€‚ duckarray īŧˆããŽåå‰ã‚’äŊŋį”¨īŧ‰ãŽčŋŊ加をįļščĄŒã™ã‚‹ã“ã¨ã¯äžĄå€¤ãŒã‚ã‚‹ã¨įĩčĢ–äģ˜ã‘ぞした。 とはいえ、これは1.18ãĢäēˆåŽšã•ã‚ŒãĻいるようãĢčžã“ãˆãžã—ãŸã€‚ čĒ¤č§Ŗã•ã‚ŒãŸã‚‰č¨‚æ­ŖしãĻください。 ã“ã‚Œã‚’č€ƒãˆã‚‹ã¨ã€PRを始めãĻも大丈å¤ĢでしょうかīŧŸ

duckarray īŧˆããŽåå‰ã‚’äŊŋį”¨īŧ‰ãŽčŋŊ加をįļščĄŒã™ã‚‹ã“ã¨ã¯äžĄå€¤ãŒã‚ã‚‹ã¨įĩčĢ–äģ˜ã‘ぞした。 とはいえ、これは1.18ãĢäēˆåŽšã•ã‚ŒãĻいるようãĢčžã“ãˆãžã—ãŸã€‚ čĒ¤č§Ŗã•ã‚ŒãŸã‚‰č¨‚æ­ŖしãĻください。 ã“ã‚Œã‚’č€ƒãˆã‚‹ã¨ã€PRを始めãĻも大丈å¤ĢでしょうかīŧŸ

これはすずãĻį§ãĢはį´ æ™´ã‚‰ã—いことぎようãĢčžã“ãˆãžã™ãŒã€æ­ŖįĸēãĒææĄˆã‚’čŠŗしくčĒŦ明するįŸ­ã„NEPから始めるぎがよいでしょう。 https://github.com/numpy/numpy/issues/13831#issuecomment-507334210を参į…§ã—ãĻ

įĸēかãĢそれはį†ãĢかãĒãŖãĻいぞす。 🙂

äģĨ前ãĢ取り上げたã‚ŗピãƒŧポイãƒŗトãĢついãĻは、æ—ĸå­˜ãŽãƒĄã‚Ģニã‚ēムではč§ŖæąēできãĒいぎではãĒいかと思いぞす。 į‰šãĢã“ã‚Œã‚‰ãŽčĄŒã¯ãŠã†ã§ã™ã‹īŧŸ

a2 = np.empty_like(a1)
a2[...] = a1[...]

įĸēかãĢ、これを1行ãĢぞとめるとよいでしょう。 これがそぎãƒĻãƒŧã‚šã‚ąãƒŧ゚ですでãĢ抟čƒŊしãĻいるかおうか、ぞたは不čļŗしãĻいるもぎがあるかおうかだけをįŸĨりたい。

īŧˆããŽåå‰ã‚’äŊŋį”¨ã—ãĻīŧ‰duckarrayぎčŋŊ加をįļščĄŒã™ã‚‹ã“ã¨ã¯äžĄå€¤ãŒã‚ã‚‹ã¨įĩčĢ–äģ˜ã‘ぞした。

これはすずãĻį§ãĢはį´ æ™´ã‚‰ã—いことぎようãĢčžã“ãˆãžã™ãŒã€æ­ŖįĸēãĒææĄˆã‚’čŠŗしくčĒŦ明するįŸ­ã„NEPから始めるぎがよいでしょう。 īŧƒ13831īŧˆã‚ŗãƒĄãƒŗトīŧ‰ã‚’参į…§

į§ã¯ã™ã§ãĢそれを書き始めぞしたが、ぞだそれを厌äē†ã™ã‚‹ã“とができぞせんでしたīŧˆį§ãŽæ‚Ēã„č¨ˆį”ģhttps://github.com/numpy/numpy/issues/13831#issuecomment-507336302īŧ‰ã€‚

äģĨ前ãĢ取り上げたã‚ŗピãƒŧポイãƒŗトãĢついãĻは、æ—ĸå­˜ãŽãƒĄã‚Ģニã‚ēムではč§ŖæąēできãĒいぎではãĒいかと思いぞす。 į‰šãĢã“ã‚Œã‚‰ãŽčĄŒã¯ãŠã†ã§ã™ã‹īŧŸ

a2 = np.empty_like(a1)
a2[...] = a1[...]

įĸēかãĢ、これを1行ãĢぞとめるとよいでしょう。 これがそぎãƒĻãƒŧã‚šã‚ąãƒŧ゚ですでãĢ抟čƒŊしãĻいるかおうか、ぞたは不čļŗしãĻいるもぎがあるかおうかだけをįŸĨりたい。

それは可čƒŊですが、į‰šåˆĨãĒã‚ŗピãƒŧロジックがåŋ…čĻãĢãĒる場合がありぞすīŧˆCuPy https://github.com/cupy/cupy/pull/2079ãĒおīŧ‰ã€‚

ã¨ã¯č¨€ã†ã‚‚ãŽãŽã€ã“ãŽį¨ŽãŽčŋŊ加ã‚ŗãƒŧドがåŋ…čĻãĢãĒるぎをéŋけるためãĢ、ã‚ŗピãƒŧ抟čƒŊが最善かもしれぞせん。

一斚、これはasarray一į¨ŽãŽäģŖæ›ŋ品ãĢãĒりぞす。 したがãŖãĻ、 copy_like新しいé–ĸ数ぎäģŖわりãĢ、NEP-18ãĢよãŖãĻææĄˆã•ã‚ŒãŸ

これらãĢはį‹Ŧč‡Ēぎプロトã‚ŗãƒĢがåŋ…čĻã§ã™ã€‚
..。
arrayとasarrayは、原際ぎnumpy.ndarrayã‚Ēブジェクトへぎåŧˇåˆļを明į¤ēįš„ãĢ意å›ŗしãĻいるためです。

ãã‚Œã‚’å†æ¤œč¨Žã—ãŸã„å ´åˆã¯ã€æ–°ã—ã„ã‚šãƒŦッドを開始する斚がよいでしょう。 ã‚ĸイデã‚ĸã€ææĄˆã€į•°č­°ã¯ã‚りぞすかīŧŸ

ä¸Šč¨˜ãŽį§ãŽã‚ŗãƒĄãƒŗトを明įĸēãĢするためãĢ、į§č‡ĒčēĢ、新しいプロトã‚ŗãƒĢがį´ æ™´ã‚‰ã—いã‚ĸイデã‚ĸであるかおうかはわかりぞせんīŧˆãŠãã‚‰ãã€į§ãŒäēˆæ¸ŦしãĻいãĒい多くぎ厄äģ‹ãĒčŠŗį´°ãŒåĢぞれãĻいぞすīŧ‰ã€æœŦåŊ“ãĢそれがį§ãŸãĄãŒå†æ¤œč¨Žã—ãĻč­°čĢ–するåŋ…čĻãŒã‚ã‚‹ã‚ĸイデã‚ĸであるかおうかį–‘問ãĢ思ãŖãĻいぞす。

SciPy'19でぎ開į™ē者äŧšč­°ã¨ã‚šãƒ—ãƒĒãƒŗトからぎã‚ŗãƒŗã‚ģãƒŗã‚ĩ゚はæŦĄãŽã¨ãŠã‚Šã§ã—た。æŦĄãŽã‚šãƒ†ãƒƒãƒ—ãĢé€˛ã‚€å‰ãĢ、1.17.0をå…Ŧ開しãĻ、原際ぎįĩŒé¨“ã‚’įŠã‚“でãŋぞしょう。

それがį§ãŸãĄãŒå†æ¤œč¨Žã—ãĻč­°čĢ–すずきã‚ĸイデã‚ĸであるかおうかæœŦåŊ“ãĢį–‘問ãĢ思ãŖãĻいぞす。

おそらくそうですが、数か月で。

おそらくそうですが、数か月で。

čŋ”äŋĄã‚りがとうございぞす。

äģĨ前ãĢ取り上げたã‚ŗピãƒŧポイãƒŗトãĢついãĻは、æ—ĸå­˜ãŽãƒĄã‚Ģニã‚ēムではč§ŖæąēできãĒいぎではãĒいかと思いぞす。 į‰šãĢã“ã‚Œã‚‰ãŽčĄŒã¯ãŠã†ã§ã™ã‹īŧŸ

a2 = np.empty_like(a1)
a2[...] = a1[...]

įĸēかãĢ、これを1行ãĢぞとめるとよいでしょう。 これがそぎãƒĻãƒŧã‚šã‚ąãƒŧ゚ですでãĢ抟čƒŊしãĻいるかおうか、ぞたは不čļŗしãĻいるもぎがあるかおうかだけをįŸĨりたい。

これãĢé–ĸするį§ãŽä¸ģãĒå•éĄŒã¯ã€ä¸å¤‰ãŽã‚ĸヒãƒĢ配列では抟čƒŊしãĒいことです。これはそれãģおįã—いことではありぞせん。 ぞた、NumPyãŽå ´åˆã€é…åˆ—ã‚’å‰˛ã‚ŠåŊ“ãĻãĻからそれを埋めるčŋŊ加ã‚ŗ゚トはãģãŧã‚ŧロãĢãĒる可čƒŊ性がありぞすが、それがすずãĻぎã‚ĸヒãƒĢ配列ãĢåŊ“ãĻはぞるかおうかはわかりぞせん。

äģĨ前ãĢ取り上げたã‚ŗピãƒŧポイãƒŗトãĢついãĻは、æ—ĸå­˜ãŽãƒĄã‚Ģニã‚ēムではč§ŖæąēできãĒいぎではãĒいかと思いぞす。 į‰šãĢã“ã‚Œã‚‰ãŽčĄŒã¯ãŠã†ã§ã™ã‹īŧŸ

a2 = np.empty_like(a1)
a2[...] = a1[...]

įĸēかãĢ、これを1行ãĢぞとめるとよいでしょう。 これがそぎãƒĻãƒŧã‚šã‚ąãƒŧ゚ですでãĢ抟čƒŊしãĻいるかおうか、ぞたは不čļŗしãĻいるもぎがあるかおうかだけをįŸĨりたい。

それは可čƒŊですが、į‰šåˆĨãĒã‚ŗピãƒŧロジックがåŋ…čĻãĢãĒる場合がありぞすīŧˆCuPy cupy / cupyīŧƒ2079ãĒおīŧ‰ã€‚

ã¨ã¯č¨€ã†ã‚‚ãŽãŽã€ã“ãŽį¨ŽãŽčŋŊ加ã‚ŗãƒŧドがåŋ…čĻãĢãĒるぎをéŋけるためãĢ、ã‚ŗピãƒŧ抟čƒŊが最善かもしれぞせん。

一斚、これはasarray一į¨ŽãŽäģŖæ›ŋ品ãĢãĒりぞす。 したがãŖãĻ、 copy_like新しいé–ĸ数ぎäģŖわりãĢ、NEP-18ãĢよãŖãĻææĄˆã•ã‚ŒãŸ

これらãĢはį‹Ŧč‡Ēぎプロトã‚ŗãƒĢがåŋ…čĻã§ã™ã€‚
..。
arrayとasarrayは、原際ぎnumpy.ndarrayã‚Ēブジェクトへぎåŧˇåˆļを明į¤ēįš„ãĢ意å›ŗしãĻいるためです。

ãã‚Œã‚’å†æ¤œč¨Žã—ãŸã„å ´åˆã¯ã€æ–°ã—ã„ã‚šãƒŦッドを開始する斚がよいでしょう。 ã‚ĸイデã‚ĸã€ææĄˆã€į•°č­°ã¯ã‚りぞすかīŧŸ

np.arrayぞたはnp.asarrayを新しいプロトã‚ŗãƒĢã§å¤‰æ›´ã™ã‚‹ãŽã¯č‰¯ã„č€ƒãˆã§ã¯ãĒいと思いぞす。 それらぎįĸēįĢ‹ã•ã‚ŒãŸæ„å‘ŗは、NumPy配列ãĢキãƒŖ゚トすることです。これが、åŸēæœŦįš„ãĢnp.duckarrayがåŋ…čĻãĒį†į”ąã§ã™ã€‚

ãã†ã¯č¨€ãŖãĻも、 likeåŧ•æ•°ã‚’duckarrayčŋŊåŠ ã™ã‚‹ã“ã¨ã‚’æ¤œč¨Žã§ããžã™ã€‚ それãĢã¯ã€ä¸Šč¨˜ãŽį°Ąį•ĨåŒ–ã•ã‚ŒãŸææĄˆã‹ã‚‰ãƒ—ãƒ­ãƒˆã‚ŗãƒĢを変更するåŋ…čĻãŒã‚りぞす-多分__duckarray__ようãĒ専į”¨ãƒ—ロトã‚ŗãƒĢぎäģŖわりãĢ__array_function__をäŊŋį”¨ã™ã‚‹ãŽã§ã™ã‹īŧŸ į§ã¯ã“れをæœŦåŊ“ãĢč€ƒãˆãĻいぞせん。

äģĨ前ãĢ取り上げたã‚ŗピãƒŧポイãƒŗトãĢついãĻは、æ—ĸå­˜ãŽãƒĄã‚Ģニã‚ēムではč§ŖæąēできãĒいぎではãĒいかと思いぞす。 į‰šãĢã“ã‚Œã‚‰ãŽčĄŒã¯ãŠã†ã§ã™ã‹īŧŸ

a2 = np.empty_like(a1)
a2[...] = a1[...]

įĸēかãĢ、これを1行ãĢぞとめるとよいでしょう。 これがそぎãƒĻãƒŧã‚šã‚ąãƒŧ゚ですでãĢ抟čƒŊしãĻいるかおうか、ぞたは不čļŗしãĻいるもぎがあるかおうかだけをįŸĨりたい。

これãĢé–ĸするį§ãŽä¸ģãĒå•éĄŒã¯ã€ä¸å¤‰ãŽã‚ĸヒãƒĢ配列では抟čƒŊしãĒいことです。これはそれãģおįã—いことではありぞせん。 ぞた、NumPyãŽå ´åˆã€é…åˆ—ã‚’å‰˛ã‚ŠåŊ“ãĻãĻからそれを埋めるčŋŊ加ã‚ŗ゚トはãģãŧã‚ŧロãĢãĒる可čƒŊ性がありぞすが、それがすずãĻぎã‚ĸヒãƒĢ配列ãĢåŊ“ãĻはぞるかおうかはわかりぞせん。

それはå…Ŧæ­Ŗです。 原際、į§ãŸãĄã¯ã™ã§ãĢį‰Šäē‹ã‚’単į´”化することができぞす。 たとえば、これはįžåœ¨CuPyとSparseで抟čƒŊしぞす。

a2 = np.copy(a1)

それはå…Ŧæ­Ŗです。 原際、į§ãŸãĄã¯ã™ã§ãĢį‰Šäē‹ã‚’単į´”化することができぞす。 たとえば、これはįžåœ¨CuPyとSparseで抟čƒŊしぞす。

a2 = np.copy(a1)

はい。ただし、「こぎduck-arrayをこぎäģ–ぎduck-arrayぎã‚ŋイプãĢã‚ŗピãƒŧする」こともåŋ…čĻã§ã™ã€‚

np.arrayぞたはnp.asarrayを新しいプロトã‚ŗãƒĢã§å¤‰æ›´ã™ã‚‹ãŽã¯č‰¯ã„č€ƒãˆã§ã¯ãĒいと思いぞす。 それらぎįĸēįĢ‹ã•ã‚ŒãŸæ„å‘ŗは、NumPy配列ãĢキãƒŖ゚トすることです。これが、åŸēæœŦįš„ãĢnp.duckarrayがåŋ…čĻãĒį†į”ąã§ã™ã€‚

į§ã‚‚これãĢついãĻįĸēäŋĄãŒæŒãĻず、こぎčŗĒå•ã‚’ã™ã‚‹ã“ã¨ã™ã‚‰æ°—ãŒé€˛ãžãĒかãŖたぎで、äģŠæ—ĨぞでそうしãĒかãŖたぎです。

ãã†ã¯č¨€ãŖãĻも、duckarrayãĢ同様ぎåŧ•æ•°ã‚’čŋŊåŠ ã™ã‚‹ã“ã¨ã‚’æ¤œč¨Žã§ããžã™ã€‚ そぎためãĢã¯ã€ä¸Šč¨˜ãŽį°Ąį•ĨåŒ–ã•ã‚ŒãŸææĄˆã‹ã‚‰ãƒ—ãƒ­ãƒˆã‚ŗãƒĢを変更するåŋ…čĻãŒã‚りぞす。おそらく、__ duckarray__ぎようãĒ専į”¨ãƒ—ロトã‚ŗãƒĢぎäģŖわりãĢ__array_function__をäŊŋį”¨ã—ぞすかīŧŸ į§ã¯ã“れをæœŦåŊ“ãĢč€ƒãˆãĻいぞせん。

それでäŊ•ã‹å•éĄŒãŒã‚るかおうかはわかりぞせんが、おそらくæŗ¨æ„ãŒåŋ…čĻã§ã™ãŒã€į§ã¯ã“ぎã‚ĸイデã‚ĸがåĨŊきãĢãĒる傞向がありぞす。 これはさぞざぞãĒãƒŦベãƒĢã§å†—é•ˇãĢčĻ‹ãˆã‚‹ã‹ã‚‚しれぞせんが、 likeãƒ‘ãƒŠãƒĄãƒŧã‚ŋをčŋŊ加するäģŖわりãĢ、æ—ĸ存ぎパã‚ŋãƒŧãƒŗãĢ垓うと、 duckarrayとduckarray_likeぞすかīŧŸ

はい。ただし、「こぎduck-arrayをこぎäģ–ぎduck-arrayぎã‚ŋイプãĢã‚ŗピãƒŧする」こともåŋ…čĻã§ã™ã€‚

これをnp.copytoåŸēãĨいãĻčĄŒã†ãŽã¯ãŠã†ã§ã™ã‹īŧŸ

これをnp.copytoåŸēãĨいãĻčĄŒã†ãŽã¯ãŠã†ã§ã™ã‹īŧŸ

į§ãŒé–“違ãŖãĻいる場合は、遠慎ãĒãč¨‚æ­ŖしãĻください。ただし、æŦĄãŽã‚ˆã†ãĒ意å‘ŗであるとæƒŗ厚しãĻいぞす。

np.copyto(cupy_array, numpy_array)

NumPyがįžåœ¨ãŽå‹•äŊœã‚’変更する意思があるとäģŽåŽšã™ã‚‹ã¨ã€ã“れは抟čƒŊする可čƒŊ性がありぞす。たとえば、 asarray常ãĢ厛先がNumPy配列であることを意å‘ŗしぞすが、 copytoは同じäģŽåŽšã‚’しぞすかīŧŸ

np.copytoすでãĢ__array_function__でぎデã‚Ŗ゚パッチをã‚ĩポãƒŧトしãĻいぞすが、これはãģãŧ同į­‰ã§ã™ã€‚

def copyto(dst, src):
    dst[...] = src

äģĨ下と同į­‰ãŽã‚‚ぎがåŋ…čĻã§ã™ã€‚

def copylike(src, like):
    dst = np.empty_like(like)
    dst[...] = src
    return dst

np.copytoすでãĢ__array_function__でぎデã‚Ŗ゚パッチをã‚ĩポãƒŧトしãĻいぞすが、これはãģãŧ同į­‰ã§ã™ã€‚

def copyto(dst, src):
    dst[...] = src

äģĨ下と同į­‰ãŽã‚‚ぎがåŋ…čĻã§ã™ã€‚

def copylike(src, like):
    dst = np.empty_like(like)
    dst[...] = src
    return dst

æ­Ŗč§Ŗです、これがį§ãŸãĄãŒæœ›ã‚“でいることです。 copytoがデã‚Ŗ゚パッチされ、ã‚Ŋãƒŧ゚と厛先が同じã‚ŋイプぎ場合ãĢ抟čƒŊしぞす。厛先配列ぎナイブナãƒĒãĢデã‚Ŗ゚パッチできるもぎがåŋ…čĻã§ã™ã€‚

ええと、 copytoは、į§ãŸãĄãŽč€ƒãˆæ–šãĢよãŖãĻは、ぞだ意å‘ŗがありぞす。 たとえば、æŦĄãŽãƒĻãƒŧã‚šã‚ąãƒŧã‚šã‚’č€ƒãˆãĻãŋぞしょう。

np.copyto(cp.ndarray, np.random.random((3,)))

これは、前čŋ°ãŽã‚ˆã†ãĢ、デãƒŧã‚ŋãŽå‰˛ã‚ŠåŊ“ãĻとã‚ŗピãƒŧぎようãĒもぎãĢ変換される可čƒŊ性がありぞす。 dst īŧˆã“ぎ場合はcp.ndarray īŧ‰ã‚’デã‚Ŗ゚パッチすると、不変ぎ配列を持つナイブナãƒĒもこれを遊切ãĒæ–šæŗ•ã§åŽŸčŖ…できぞす。 ぞた、懸åŋĩäē‹é …と思われる新しいAPIīŧˆNumPyが提䞛するだけで、äŊŋį”¨ã—ãĒいīŧ‰ã‚’čŋŊ加する手間もįœã‘ぞす。

最čŋ‘į§ãĢčĩˇã“ãŖたåˆĨãŽč€ƒãˆã‚’æĩŽãåŊĢりãĢするためãĢ、これらぎAPIがäģ–ぎナイブナãƒĒ間ぎダã‚Ļãƒŗ゚トãƒĒãƒŧムでäŊ•ã‚’意å‘ŗするかīŧˆãŸã¨ãˆã°ã€DaskとXarrayがおぎようãĢį›¸äē’äŊœį”¨ã™ã‚‹ã‹īŧ‰ãĢついãĻč€ƒãˆã‚‹äžĄå€¤ãŒã‚ã‚Šãžã™ã€‚

こぎペãƒŧジはåŊšãĢįĢ‹ãĄãžã—たかīŧŸ
0 / 5 - 0 評価