<div dir="ltr">I'm pretty sure I wrote the offending line in the vstack() docs.<div><br></div><div>The original motivation for stack() was that stacking behavior of hstack(), vstack() and dstack() was somewhat inconsistent, especially with regard to lower dimensional input. stack() is conceptually much simpler and more general.<br><div><br></div><div>That said, if you know vstack() and find it useful, great, use it. It is not going away in NumPy. We don't remove functions just because there's a better alternative API, but rather use the docs to try to point new users in a better direction.</div></div></div><br><div class="gmail_quote"><div dir="ltr">On Thu, Nov 9, 2017 at 2:11 PM Eric Wieser <<a href="mailto:wieser.eric%2Bnumpy@gmail.com">wieser.eric+numpy@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="m_-2992686778645003772markdown-here-wrapper"><p style="margin:0px 0px 1.2em!important">I think the primary problems with it are:</p>
<ul style="margin:1.2em 0px;padding-left:2em">
<li style="margin:0.5em 0px">A poor definition of “vertical” in the world of stacked matrices - in <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">np.linalg</code> land, this means <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">axis=-2</code>, but in <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">vstack</code> land, it means <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">axis=0</code>.</li>
<li style="margin:0.5em 0px">Mostly undocumented auto-2d behavior that doesn’t make you think well enough about dimensions. Numpy deliberately distinguishes between “row vectors” <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">(1, N)</code> and vectors <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">(N,)</code>, so it’s a shame when APIs like <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">vstack</code> and <code style="font-size:0.85em;font-family:Consolas,Inconsolata,Courier,monospace;margin:0px 0.15em;padding:0px 0.3em;white-space:pre-wrap;border:1px solid rgb(234,234,234);background-color:rgb(248,248,248);border-radius:3px;display:inline">np.matrix</code> try to hide this distinction.</li>
</ul></div></div><div dir="ltr"><div class="m_-2992686778645003772markdown-here-wrapper">
<p style="margin:0px 0px 1.2em!important">Eric</p></div></div><div dir="ltr"><div class="m_-2992686778645003772markdown-here-wrapper">
<p style="margin:0px 0px 1.2em!important">On Thu, 9 Nov 2017 at 13:59 Mark Bakker <<a href="mailto:markbak@gmail.com" target="_blank">markbak@gmail.com</a>> wrote:</p>
<p style="margin:0px 0px 1.2em!important"></p><div class="m_-2992686778645003772markdown-here-exclude"><p></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 11/09/2017 04:30 AM, Joe wrote:<br>
> Hello,<br>
><br>
> I have a question and hope that you can help me.<br>
><br>
> The doc for vstack mentions that "this function continues to be<br>
> supported for backward compatibility, but you should prefer<br>
> np.concatenate or np.stack."<br>
><br>
> Using vstack was convenient because "the arrays must have the same shape<br>
> along all but the first axis."<br>
><br>
> So it was possible to stack an array (3,) and (2, 3) to a (3, 3) array<br>
> without using e.g. atleast_2d on the (3,) array.<br>
><br>
> Is there a possibility to mimic that behavior with np.concatenate or<br>
> np.stack?<br>
><br></blockquote></div></div></div><div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
> Joe<br>
<br></blockquote><div><br></div><div>Can anybody explain why vstack is going the way of the dodo? </div><div>Why are stack / concatenate better? What is 'bad' about vstack?</div><div><br></div><div>Thanks,</div><div><br></div><div>Mark </div></div></div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote><p></p></div><p style="margin:0px 0px 1.2em!important"></p>
<div title="MDH:SSB0aGluayB0aGUgcHJpbWFyeSBwcm9ibGVtcyB3aXRoIGl0IGFyZTo8ZGl2Pjxicj48L2Rpdj48
ZGl2PiogQSBwb29yIGRlZmluaXRpb24gb2YgInZlcnRpY2FsIiBpbiB0aGUgd29ybGQgb2Ygc3Rh
Y2tlZCBtYXRyaWNlcyAtIGluIGBucC5saW5hbGdgIGxhbmQsIHRoaXMgbWVhbnMgYGF4aXM9LTJg
LCBidXQgaW4gYHZzdGFja2AgbGFuZCwgaXQgbWVhbnMgYGF4aXM9MGAuPC9kaXY+PGRpdj4qIE1v
c3RseSB1bmRvY3VtZW50ZWQgYXV0by0yZCBiZWhhdmlvciB0aGF0IGRvZXNuJ3QgbWFrZSB5b3Ug
dGhpbmsgd2VsbCBlbm91Z2ggYWJvdXQgZGltZW5zaW9ucy4gTnVtcHkgZGVsaWJlcmF0ZWx5IGRp
c3Rpbmd1aXNoZXMgYmV0d2VlbiAicm93IHZlY3RvcnMiIGAoMSwgTilgIGFuZCB2ZWN0b3JzIGAo
TiwpYCwgc28gaXQncyBhIHNoYW1lIHdoZW4gQVBJcyBsaWtlIGB2c3RhY2tgIGFuZCBgbnAubWF0
cml4YCB0cnkgdG8gaGlkZSB0aGlzIGRpc3RpbmN0aW9uLjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxk
aXY+PGJyPjwvZGl2PjxkaXY+RXJpYzwvZGl2PjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9x
dW90ZSI+PGRpdiBkaXI9Imx0ciI+T24gVGh1LCA5IE5vdiAyMDE3IGF0IDEzOjU5IE1hcmsgQmFr
a2VyICZsdDs8YSBocmVmPSJtYWlsdG86bWFya2Jha0BnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5r
Ij5tYXJrYmFrQGdtYWlsLmNvbTwvYT4mZ3Q7IHdyb3RlOjxicj48L2Rpdj48YmxvY2txdW90ZSBj
bGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDox
cHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2IGNsYXNz
PSJnbWFpbF9leHRyYSI+PGRpdiBjbGFzcz0iZ21haWxfcXVvdGUiPjxibG9ja3F1b3RlIGNsYXNz
PSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAj
Y2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPgpPbiAxMS8wOS8yMDE3IDA0OjMwIEFNLCBKb2Ug
d3JvdGU6PGJyPgomZ3Q7IEhlbGxvLDxicj4KJmd0Ozxicj4KJmd0OyBJIGhhdmUgYSBxdWVzdGlv
biBhbmQgaG9wZSB0aGF0IHlvdSBjYW4gaGVscCBtZS48YnI+CiZndDs8YnI+CiZndDsgVGhlIGRv
YyBmb3IgdnN0YWNrIG1lbnRpb25zIHRoYXQgInRoaXMgZnVuY3Rpb24gY29udGludWVzIHRvIGJl
PGJyPgomZ3Q7IHN1cHBvcnRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgYnV0IHlvdSBz
aG91bGQgcHJlZmVyPGJyPgomZ3Q7IG5wLmNvbmNhdGVuYXRlIG9yIG5wLnN0YWNrLiI8YnI+CiZn
dDs8YnI+CiZndDsgVXNpbmcgdnN0YWNrIHdhcyBjb252ZW5pZW50IGJlY2F1c2UgInRoZSBhcnJh
eXMgbXVzdCBoYXZlIHRoZSBzYW1lIHNoYXBlPGJyPgomZ3Q7IGFsb25nIGFsbCBidXQgdGhlIGZp
cnN0IGF4aXMuIjxicj4KJmd0Ozxicj4KJmd0OyBTbyBpdCB3YXMgcG9zc2libGUgdG8gc3RhY2sg
YW4gYXJyYXkgKDMsKSBhbmQgKDIsIDMpIHRvIGEgKDMsIDMpIGFycmF5PGJyPgomZ3Q7IHdpdGhv
dXQgdXNpbmcgZS5nLiBhdGxlYXN0XzJkIG9uIHRoZSAoMywpIGFycmF5Ljxicj4KJmd0Ozxicj4K
Jmd0OyBJcyB0aGVyZSBhIHBvc3NpYmlsaXR5IHRvIG1pbWljIHRoYXQgYmVoYXZpb3Igd2l0aCBu
cC5jb25jYXRlbmF0ZSBvcjxicj4KJmd0OyBucC5zdGFjaz88YnI+CiZndDs8YnI+PC9ibG9ja3F1
b3RlPjwvZGl2PjwvZGl2PjwvZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXYgY2xhc3M9ImdtYWlsX2V4
dHJhIj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1
b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7
cGFkZGluZy1sZWZ0OjFleCI+CiZndDsgSm9lPGJyPgo8YnI+PC9ibG9ja3F1b3RlPjxkaXY+PGJy
PjwvZGl2PjxkaXY+Q2FuIGFueWJvZHkgZXhwbGFpbiB3aHkgdnN0YWNrIGlzIGdvaW5nIHRoZSB3
YXkgb2YgdGhlIGRvZG8/Jm5ic3A7PC9kaXY+PGRpdj5XaHkgYXJlIHN0YWNrIC8gY29uY2F0ZW5h
dGUgYmV0dGVyPyBXaGF0IGlzICdiYWQnIGFib3V0IHZzdGFjaz88L2Rpdj48ZGl2Pjxicj48L2Rp
dj48ZGl2PlRoYW5rcyw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pk1hcmsmbmJzcDs8L2Rpdj48
L2Rpdj48L2Rpdj48L2Rpdj4KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPHdicj5fX19f
X19fX19fX19fX19fXzxicj4KTnVtUHktRGlzY3Vzc2lvbiBtYWlsaW5nIGxpc3Q8YnI+CjxhIGhy
ZWY9Im1haWx0bzpOdW1QeS1EaXNjdXNzaW9uQHB5dGhvbi5vcmciIHRhcmdldD0iX2JsYW5rIj5O
dW1QeS1EaXNjdXNzaW9uQHB5dGhvbi5vcmc8L2E+PGJyPgo8YSBocmVmPSJodHRwczovL21haWwu
cHl0aG9uLm9yZy9tYWlsbWFuL2xpc3RpbmZvL251bXB5LWRpc2N1c3Npb24iIHJlbD0ibm9yZWZl
cnJlciIgdGFyZ2V0PSJfYmxhbmsiIGRhdGEtc2FmZXJlZGlyZWN0dXJsPSJodHRwczovL3d3dy5n
b29nbGUuY29tL3VybD9xPWh0dHBzOi8vbWFpbC5weXRob24ub3JnL21haWxtYW4vbGlzdGluZm8v
bnVtcHktZGlzY3Vzc2lvbiZhbXA7c291cmNlPWdtYWlsJmFtcDt1c3Q9MTUxMDM1MTgzNTM0MjAw
MCZhbXA7dXNnPUFGUWpDTkdPSk5ydWdWMVU0SXR6NlpqRG1LTVdoZVVZeWciPmh0dHBzOi8vbWFp
bC5weXRob24ub3JnLzx3YnI+bWFpbG1hbi9saXN0aW5mby9udW1weS08d2JyPmRpc2N1c3Npb248
L2E+PGJyPgo8L2Jsb2NrcXVvdGU+PC9kaXY+" style="height:0;width:0;max-height:0;max-width:0;overflow:hidden;font-size:0em;padding:0;margin:0">​</div></div></div>
_______________________________________________<br>
NumPy-Discussion mailing list<br>
<a href="mailto:NumPy-Discussion@python.org" target="_blank">NumPy-Discussion@python.org</a><br>
<a href="https://mail.python.org/mailman/listinfo/numpy-discussion" rel="noreferrer" target="_blank">https://mail.python.org/mailman/listinfo/numpy-discussion</a><br>
</blockquote></div>