商城网站怎么做推广,网站如何做淘宝支付,怎么查看一个网站的建设地区,信阳做房产哪个网站好用python的numpy包是一个经过高度优化过的矩阵计算库#xff0c;有各种加速组件#xff0c;很多其他的库也都建立在它之上#xff0c;适用于大数据计算#xff0c;但也区别于自带类型列表list。但是其也受限于Python设计规则#xff0c;或者自身优化的原因#xff0c;有很多… python的numpy包是一个经过高度优化过的矩阵计算库有各种加速组件很多其他的库也都建立在它之上适用于大数据计算但也区别于自带类型列表list。但是其也受限于Python设计规则或者自身优化的原因有很多提前注意的要点这个需要慢慢积累。 首先numpy包支持(3,)以及(3,1)(1,3)形式的向量后两者是常见的列向量与行向量可以正常参与矩阵运算但对以第一个定义比较模糊其实既不是行向量也不是列向量但是却可以行向量去对待。python numpy默认行优先按行展开默认优先组成行向量而matlab按列展开。而tensorflow甚至还支持()shape的张量比如tf.constant(3)虽然也是按行展开。但是其实到了更高维(三维以及以上)python其实与matlab甚至c语言维数顺序定义又不一样哪一个是深度维度。。其实python里面只有第一维第二维第三维你可以按你自己的思路去映射一个张量运算的时候也是(包括展开恢复等)但是如果要代表具体的意义比如tensorflow的特征图意义则需要指定不然不好统一。 下面开始正式介绍例程
https://blog.csdn.net/wintersshi/article/details/80489258
行向量 方式1
import numpy as np
bnp.array([1,2,3]).reshape((1,-1))
print(b,b.shape)结果
(array([[1, 2, 3]]), (1, 3))方式2
import numpy as np
bnp.array([[1,2,3]]) #两层[]
print(b,b.shape)结果
(array([[1, 2, 3]]), (1, 3))列向量
方式1
import numpy as np
anp.array([1,2,3]).reshape((-1,1))
print(a,a.shape)结果
(array([[1],[2],[3]]), (3, 1))方式2
import numpy as np
anp.array([[1,2,3]]).T
print(a,a.shape)结果
(array([[1],[2],[3]]), (3, 1))备注
这篇文章写了好久了,中间习惯了在其他网站写博客,所以CSDN好久就没登录了,今天登录后发现这篇文章有很多评论,才发现文章写的确实有问题,实在是抱歉.感谢大家的指正.文章已修改. 关于维度顺序的话有时候特别容易把人绕晕所以有人总结了一些自己理解的方法 https://blog.csdn.net/marukoheart/article/details/88091409
本文关键词: 行列习惯 行列习惯 行列习惯
一、行列维度
A np.array([1, 2, 3, 4, 5, 6]) # 一维
print(A.shape)
(6,) # 1X6 1行6列
B np.array([[1, 2], [3, 4], [5, 6]]) # 二维
print(B.shape)
(3, 2) # 3X2 3行2列
C np.array([[[1], [2]], [[3], [4]], [[5], [6]]]) # 三维
print(C.shape)
(3, 2, 1) # 可以看到新增加的维度是从左边插入的矩阵Tips
行列习惯 一般说话的习惯是行列 (很少有人习惯说列行吧) 所以在矩阵中 m x n 就是m行×n列。维度是从0开始索引的矩阵有两个维度第一个是0维度第二个是1维度其中0维度对应行1维度对应列符合行列习惯。上面的代码中生成了3×2的数组B即0维度有3个元素1维度有2个元素。一维数组一定要用 1 × n 来记
奇怪的分析(可能是错的看了忘了就好)
左边插入 对A,B,C三个数组分析即可知道新增加的维度是从左边插入的 (那为啥0维度是行而不是列 有点矛盾啊)一维数组为啥是 (6 , ) 而不是 (, 6) 。这样才能对应上 (行列) 吧两个矩阵的乘积例如Y*Z必须要满足Y的1维度元素个数和Z的0维度元素个数相同。 比如(2, 3) 和 (3, 4) 是满足的因为都是3个元素。这个很好记只要中间两个数相同即可但是要注意一维数组A虽然是 (6, )表示的但是它乘(6, 1)是满足的乘(1, 6)是不满足的 所以说一维数组用( , 6)表示更好吧
二、axis 0/1/2
A np.array([1, 2, 3, 4, 5, 6])
print(A.sum(axis 0))
21
B np.array([[1, 2], [3, 4], [5, 6]])
print(B.sum(axis 0))
print(B.sum(axis 1))
[ 9 12] # [1,2] [3, 4] [5, 6] [9, 12] 每一行的和
[ 3 7 11] #[1, 3, 5] [2, 4, 6] [3, 7, 11] 每一列的和
C np.array([[[1], [2]], [[3], [4]], [[5], [6]]])
print(C.sum(axis 0))
[[ 9] [12]]axis是轴的意思跟维度一样是从0开始索引。 二维数组中有两个轴
0轴沿着0行到1行的方向垂直向下纵向1轴沿着0列到1列的方向水平延伸横向
由于行列没有方向的属性所以这里用0行到1行的向量来表示方向加强记忆 这样就又符合行列习惯了 0对应行1对应列
至于axis 0/1/2运算的分析可以查看 https://blog.csdn.net/sky_kkk/article/details/79725646 思路清奇便于记忆。 所以的话在不确定的时候最好先用简单的numpy实验验证一下否则可能出错或者输出可能不是预期的结果。 比如 https://blog.csdn.net/u012871493/article/details/71055653
numpy中shape为(m,)的数组在矩阵运算的过程中看作行向量处理 附 Numpy的陷阱
你也可以看看链接下的评论以及附加链接。。
当然了最后一篇博文就直接开门见山了。 https://blog.csdn.net/lyl771857509/article/details/84063850 1、numpy中shape(m, )其实默认是一个 1xm的行向量 示例
1.1 生成一个shape(m,)的数组 2、numpy中将行向量转为列向量的集中方法
因为m,1是一维数组默认是行向量要想变成列向量mxn. 就必须增加一个维度
2.1 reshape操作 2.2 数组中添加一个维度 np.newaxis,可以在任何位置插入一个维度 2.3、通过二维数组转置 3、证明shapem,默认是个行向量