Таким образом, фактический код в hstack
является:
arrs = [atleast_1d(_m) for _m in tup]
# As a special case, dimension 0 of 1-dimensional arrays is "horizontal"
if arrs[0].ndim == 1:
return _nx.concatenate(arrs, 0)
else:
return _nx.concatenate(arrs, 1)
Сначала он петлями через аргументы и убеждается, что каждый из них по крайней мере, 1д. Это касается 0d и скалярных элементов, например, в np.hstack([0,1,np.arange(3)])
.
Остальное выбирает между конкатенированием на одной и только осевой или второй.
vstack
аналогичный, за исключением того, что он делает вещи по крайней мере 2d и объединяет 1-й.
Судя по ответам на вопросы/ответы, они все еще используются довольно много, и я думаю, что в большинстве случаев они не вызывают проблем. Это np.append
, что создает большинство проблем. Это то, чего я бы хотел, чтобы они никогда не добавляли.
Я думаю, что главная проблема с hstack
и vstack
заключается в том, что они поощряют (или, по крайней мере, допускают) ленивое мышление о размерах и формах. Когда возникают вопросы, это связано с тем, что плакат не понимает, что означает иметь одинаковое количество измерений или что фигуры должны быть равными (за исключением одной оси).
Еще один кадр в стеке вызовов? – wim
Потому что, если вы попытаетесь понять их обоих, вам может быть не так о «удобочитаемости» и о производительности? – Divakar
Вероятно, потому что семантика более ясна для размеров массива, отличных от 2. – user2357112