参见一些例子
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(np.concatenate((a,b), axis=0)) # [1,2,3,4,5,6]
print(np.hstack((a,b))) # [1,2,3,4,5,6]
print(np.vstack((a,b))) # [[1,2,3],[4,5,6]]
print(np.concatenate((a,b), axis=1)) # IndexError: axis 1 out of bounds [0, 1)
hstack的结果与沿轴= 0的连接相同,但api文档说hstack =沿轴= 1连接,请查看https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.hstack.html#numpy.hstack
沿轴= 1连接引发一个IndexError,api文件说hstack =沿轴= 0连接,请查看https://docs.scipy.org/doc/numpy-dev/reference/generated/numpy.vstack.html#numpy.vstack
任何人都可以解释一下吗?顺便说一下,当ndarray的维数小于2并且沿轴= 1连接时,是否可以解释如何广播?
答案 0 :(得分:0)
查看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)
我在axis=1
的文档中看不到任何内容。它使用的术语是'stack them horizontally'
。
正如我在一年前提到的那样,Concatenation of 2 1D numpy arrays along 2nd axis,如果轴太高,早期版本不会引发错误。但是在1.12中我们得到了一个错误。
有一个新的np.stack
可以根据需要添加维度:
In [46]: np.stack((np.arange(3), np.arange(4,7)),axis=1)
Out[46]:
array([[0, 4],
[1, 5],
[2, 6]])
基本功能是concatenate
。各种stack
函数以某种方式调整数组维度,然后执行concatenate
。查看他们的代码以查看详细信息。 (我已经总结了之前帖子中的差异)。
答案 1 :(得分:0)
np.hstack(tup)
和np.concatenate(tup, axis=1)
确实是等效的,但前提是tup
包含至少为2维的数组。这实际上是在vstack
的文档中详细说明的,所以看起来它只是一种疏忽,它在hstack
的文档中也没有;但它会for future versions。