不二如是 发表于 2020-2-16 13:11:39

11 - 合并函数的小坑须知|【常用方法】

本帖最后由 不二如是 于 2020-2-16 21:43 编辑

上一讲我们理解了副本和视图,本讲就里面的合并函数好好说下。

新建 4*4 数组和一维数组:


通过上一讲的 np.c_ 来合并 a 和 b:


现在 b 就跑到 a 的右边了。

我们换一换:


也很自然换过来了。

c_ 中的 c 是 column 的缩写,行的话,就是 r 。

那么我可以将 b 加到 a 下面吗?

试一下:


啊呀,报错了~

报错内容也说了:

**** Hidden Message *****
目前来看 b 是横向排的 4 个项,为什么不能合并呢?

a 是 4 行 4 列,对吧。

b 是啥?我们输出 shape 看看:


4 代表行数,那么这个数组其实是列向量(纵排)!

所以不能直接和 a 上下拼接。

这个是新手很容易踩的坑。

此时我们使用 reshape 将 b 转为行向量。

代码:

b.reshape(1,4)
然后合并:


搞定!


更多组合方法

组合有点像拼积木:

行数相同,左右拼
列数相同,上下拼
记住这个口诀,合并时的很多坑都会避开~

那么如果 b 是一个二维数组。

水平左右拼接,只要默认行数相同即可。

例如:


通过 np.c_ 将其合并到 a 的右边:


左右都可以,但是上下不行。

二维数组变换比一维要复杂一些。

若通过 reshape 方法转为 2*4 数组:


主要图中箭头的走向,先把二维数组打“平”,然后按照行列要求依次插入。

这样是数组的重新塑造,有点不符合矩阵变化的规则。

怎么办呢?

我们要用到转置,很简单直接:


再来拼到 a 的上面:


x.T 比 reshape 用的更多~

除了 np.c 还可以使用 np.column_stack((a,b))。

从名字我们知道也是对列进行叠加,若 a,b 都是一维列,合并变为二维。

行叠加可以使用 np.row_stack((a,b))。

若 a,b 是一维列,会先转换成二维行后合并成二维。

如果你分不清行列向量,就用 shape 查,然后 x.T 或者 reshape 转化。

下一节我们来学习如何拆分数组。

源代码:



如果有收获,别忘了评分{:10_281:} :

http://xxx.fishc.com/forum/201709/19/094516hku92k2g4kefz8ms.gif

如果想看更多,请订阅 淘专辑(传送门)(不喜欢更要订阅{:10_297:} )

zltzlt 发表于 2020-2-16 13:15:34

Numpy 神仙操作,我要学

TCY 发表于 2020-2-17 11:22:15

Numpy 神仙操作,我要学

_2_ 发表于 2020-2-17 12:32:37

Numpy 神仙操作,我要学

maxliu06 发表于 2020-2-17 12:51:06

Numpy 神仙操作,我要学

tjuwlb 发表于 2020-3-8 10:59:54

Numpy 神仙操作,我要学

syf040916 发表于 2020-3-14 12:03:07

Numpy 神仙操作,我要学

听风夜雨 发表于 2020-4-4 00:07:17

Numpy 神仙操作,我要学

zsygsnbfsdm 发表于 2020-7-3 20:24:45

Numpy 神仙操作,我要学

卡卡尼西亚 发表于 2020-7-24 10:07:49

Numpy 神仙操作,我要学

小羊趴在云朵上 发表于 2021-11-30 16:02:43

继续学习numpy

Tikooy 发表于 2023-10-9 21:20:08

Numpy 神仙操作,我要学
页: [1]
查看完整版本: 11 - 合并函数的小坑须知|【常用方法】