<div dir="ltr"><div dir="ltr"><div dir="ltr"><div dir="ltr"><div>Hello,</div><div><br></div><div>Currently, `zeros_like` is based `copyto` as opposed to `calloc`.</div><div>This causes inconsistencies in the amount of time it takes to create an array with `zeros` + `shape` and `zeros_like` for large arrays.</div><div>This was first raised <a href="https://github.com/numpy/numpy/issues/9909">https://github.com/numpy/numpy/issues/9909</a><br></div><div><br></div><div>It seems to me that a memory copy can be avoided by using `<span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">PyArray_NewFromDescr_int` in C.<br></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><br></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">I propose creating a new C_API function `<span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en">PyArray_NewZerosLikeArray` that behaves much like the <span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en">`PyArray_NewLikeArray` with the exception that it calls</span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en">`<span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">PyArray_NewFromDescr_int` instead of `<span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">PyArray_NewFromDescr` to initialize the array to zeros with calloc.</span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">An all C implementation of `zeros_like` is also possible by adapting the `empty_like` function.</span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">A draft implementation is viewable <a href="https://github.com/hmaarrfk/numpy/pull/2/files">https://github.com/hmaarrfk/numpy/pull/2/files</a> for those looking for more details about my proposed implementation. <br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">Thank you for considering.<br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><br></span></span></span></span></span></span></span></span></span></span></div><div><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-en"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1"><span class="gmail-blob-code-inner gmail-blob-code-marker-addition"><span class="gmail-pl-c1">Mark<br></span></span></span></span></span></span></span></span></span></span></div></div></div></div></div>