# np.cross()、np.stack()、np.hstack()、np.vstack()、numpy.dstack()、np.split()、np.hsplit()、np.vsplit()函数详解

## 1.numpy.cross(a, b, axisa=-1, axisb=-1, axisc=-1, axis=None)

计算两个向量（向量数组）的叉乘。叉乘返回的数组既垂直于`a`，又垂直于`b`。 如果`a`,`b`是向量数组，则向量在最后一维定义。该维度可以为2，也可以为3. 为2的时候会自动将第三个分量视作0补充进去计算。

``````import numpy as np

# Vector cross-product
x = [1, 2, 3]
y = [4, 5, 6]
np.cross(x, y)
T = np.array([-3,  6, -3])
print(T)

print('n')

# Multiple vector cross-products. Note that the direction of the cross
# product vector is defined by the `right-hand rule`.
x = np.array([[1,2,3], [4,5,6]])
y = np.array([[4,5,6], [1,2,3]])
T1 = np.cross(x, y)
print(T1)``````

``````[-3  6 -3]

[[-3  6 -3]
[ 3 -6  3]]``````

## 2.np.stack()

stack此时翻译成堆叠，也就是对数据进行堆叠，函数原型为：stack(arrays, axis=0)，arrays可以传数组和列表。axis即在横轴（行）方向或者纵轴（列）方向对数据进行操作。

``````import numpy as np

a = [[1, 2, 3],
[4, 5, 6]]
print("列表a如下：")
print(a)

print("axis=0")
c = np.stack(a, axis=0)
print(c)

print("axis=1")
c = np.stack(a, axis=1)
print(c)``````

``````列表a如下：
[[1, 2, 3], [4, 5, 6]]
axis=0
[[1 2 3]
[4 5 6]]
axis=1
[[1 4]
[2 5]
[3 6]]

Process finished with exit code 0
``````

## 3.np.hstack()

函数原型：hstack(tup) ，参数tup可以是元组，列表，或者numpy数组，返回结果为numpy的数组。沿着水平方向将数组堆叠起来。

``````import numpy as np

a = [1, 2, 3]
b = [4, 5, 6]
print(np.hstack((a, b)))

print('n')

a = [[1], [2], [3]]
b = [[4], [5], [6]]
print(np.hstack((a, b)))``````

``````[1 2 3 4 5 6]

[[1 4]
[2 5]
[3 6]]``````

## 4.np.vstack()

函数原型：vstack(tup) ，参数tup可以是元组，列表，或者numpy数组，返回结果为numpy的数组。它是垂直（按照行顺序）的把数组给堆叠起来 v就是 vertical 垂直方向的意思。

``````import numpy as np
a=[1,2,3]
b=[4,5,6]
print(np.vstack((a,b)))

print('n')

a=[[1],[2],[3]]
b=[[4],[5],[6]]
print(np.vstack((a,b)))``````

``````[[1 2 3]
[4 5 6]]

[[1]
[2]
[3]
[4]
[5]
[6]]

Process finished with exit code 0``````

## 5.numpy.dstack(）函数

``````import numpy as np
a = np.array((1,2,3))
b = np.array((4,5,6))
print(np.dstack((a,b)))

print('n')

a1 = np.array([[1],[2],[3]])
b1 = np.array([[2],[3],[4]])
print(np.dstack((a1,b1)))
``````

``````[[[1 4]
[2 5]
[3 6]]]

[[[1 2]]

[[2 3]]

[[3 4]]]

Process finished with exit code 0``````

## 6.np.split()

split(ary, indices_or_sections, axis=0)
把一个数组从左到右按顺序切分
参数： ary:要切分的数组,indices_or_sections:如果是一个整数，就用该数平均切分，如果是一个数组，为沿轴切分的位置（左开右闭）,axis：沿着哪个维度进行切向，默认为0，横向切分。为1时，纵向切分.hsplitvsplitarray_split之间的唯一区别是array_split允indices_or_sections是一个不等于轴的整数。 对于应该分成n个部分的长度为l的数组，它将返回l％n个大小为l // n + 1的子数组，其余大小为l // n。

``````import numpy as np
x = np.arange(8.0)
T = np.array_split(x, 3)
print(T)
print('n')
T1 = np.array_split(x, [1, 3])
print(T1)``````

``````[array([0., 1., 2.]), array([3., 4., 5.]), array([6., 7.])]

[array([0.]), array([1., 2.]), array([3., 4., 5., 6., 7.])]

Process finished with exit code 0``````

## np.vsplit函数 (row方向)

vsplit沿着垂直轴分割，其分割方式与hsplit用法相同。

THE END