<div dir="ltr"><div class="markdown-here-wrapper" style=""><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>
<p style="margin:0px 0px 1.2em!important">Eric</p>
<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="markdown-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>