1、数据类型
nan和inf是什么
-
nan not a number
-
np.nan != np.nan
-
任何值和nan进行计算都是nan
-
inf 无穷
1.1、数据类型的操作
In [9]: t3 = np.array([[[1,2,3],[4,5,6]],[[7,8,9],[10,11,12]]])
In [10]: t3
Out[10]:
array([[[ 1, 2, 3],
[ 4, 5, 6]],
[[ 7, 8, 9],
[10, 11, 12]]])
1.1、查看数组类名:type()
In [13]: type(t3)
Out[13]: numpy.ndarray
1.2、查看数据类型:
In [15]: t3.dtype
Out[15]: dtype('int32')
1.3、查看数组形状
In [16]: t3.shape
Out[16]: (2, 2, 3)
1.2、修改数组形状reshape()
In [17]: t4 = np.arange(12)
In [18]: t4
Out[18]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11])
In [19]: t4.reshape((3,4)) # 三行四列
Out[19]:
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
1.2.1、三维数组
In [23]: t5 = np.arange(24).reshape((2,3,4))
In [24]: t5
Out[24]:
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
1.2.2、reshape第一个参数为数据的块数,第二个为每块中数据行数
三维数组变二维数组
In [25]: t5.reshape((4,6))
Out[25]:
array([[ 0, 1, 2, 3, 4, 5],
[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17],
[18, 19, 20, 21, 22, 23]])
1.2.3、变为一维数组
(1,24)与(24,1)都是二维数组,相当于在一维数组上加一个中括号
In [26]: t5.reshape(24,)
Out[26]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
1.2.4、将未知三维数组转换为一维的方法(得到数组的总元素个数,二维同理)
方法一
In [35]: t6 = t5.reshape((t5.shape[0]*t5.shape[1]*t5.shape[2],))
In [36]: t6
Out[36]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
方法二flatten()
函数直接展开数组
In [38]: t5.flatten()
Out[38]:
array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23])
注意
- reshape函数是有返回值的不会对源数组造成改变
- 直接对源改变的函数一般不会有返回值
- reshape第一个参数为数据的块数,第二个为每块中数据行数
2、 数组和数的计算
2.1 加减乘除
In [10]: t2 + 2
Out[10]:
array([[ 2, 3, 4, 5, 6, 7],
[ 8, 9, 10, 11, 12, 13],
[14, 15, 16, 17, 18, 19],
[20, 21, 22, 23, 24, 25]])
In [11]: t2 *2
Out[11]:
array([[ 0, 2, 4, 6, 8, 10],
[12, 14, 16, 18, 20, 22],
[24, 26, 28, 30, 32, 34],
[36, 38, 40, 42, 44, 46]])
In [12]: t2/2
Out[12]:
array([[ 0. , 0.5, 1. , 1.5, 2. , 2.5],
[ 3. , 3.5, 4. , 4.5, 5. , 5.5],
[ 6. , 6.5, 7. , 7.5, 8. , 8.5],
[ 9. , 9.5, 10. , 10.5, 11. , 11.5]])
In [13]: t2/0
A:\program\anaconda\Scripts\ipython:1: RuntimeWarning: divide by zero encountered in true_divide
A:\program\anaconda\Scripts\ipython:1: RuntimeWarning: invalid value encountered in true_divide
Out[13]:
array([[nan, inf, inf, inf, inf, inf],
[inf, inf, inf, inf, inf, inf],
[inf, inf, inf, inf, inf, inf],
[inf, inf, inf, inf, inf, inf]])
除以0得到的结果:
- nan:not a number
- inf:infinity 无限,无穷
In [16]: t3
Out[16]:
array([[100, 101, 102, 103, 104, 105],
[106, 107, 108, 109, 110, 111],
[112, 113, 114, 115, 116, 117],
[118, 119, 120, 121, 122, 123]])
In [17]: t2 + t3
Out[17]:
array([[100, 102, 104, 106, 108, 110],
[112, 114, 116, 118, 120, 122],
[124, 126, 128, 130, 132, 134],
[136, 138, 140, 142, 144, 146]])
In [18]: t2*t3
Out[18]:
array([[ 0, 101, 204, 309, 416, 525],
[ 636, 749, 864, 981, 1100, 1221],
[1344, 1469, 1596, 1725, 1856, 1989],
[2124, 2261, 2400, 2541, 2684, 2829]])
In [21]: t4
Out[21]:
array([[0],
[1],
[2],
[3]])
In [22]: t3
Out[22]:
array([[100, 101, 102, 103, 104, 105],
[106, 107, 108, 109, 110, 111],
[112, 113, 114, 115, 116, 117],
[118, 119, 120, 121, 122, 123]])
In [23]: t3 -t4
Out[23]:
array([[100, 101, 102, 103, 104, 105],
[105, 106, 107, 108, 109, 110],
[110, 111, 112, 113, 114, 115],
[115, 116, 117, 118, 119, 120]])
计算规则:
- 维度相同的进行对应位置的计算
- 遵循广播原则
若两个数组的后缘维度(training dimension,从末尾开始计算的元素)轴长度相等或其中一方为1,则他们广播兼容。广播会在缺失或长度为1的维度上进行。
例如:
三维数组shape(3,3,3)与(3,2)不能计算,shape(3,3,2)与(3,2)能计算
二维数组必须遵循行列完全相同或者与此二维数组轴长相同的一位数组
上述t3 - t4计算中 t4对比t3为一列缺失维度,所以计算会在t4每一列上进行
3、常用统计函数
- 求和:
t.sum(axis=None)
- 均值:
t.mean(a,axis=None)
受离群点的影响较大 - 中值:
np.median(t,axis=None)
- 最大值:
t.max(axis=None)
- 最小值:
t.min(axis=None
- 极值:
np.ptp(t,axis=None)
即最大值和最小值只差 - 标准差:
t.std(axis=None)
标准差是一组数据平均值分散程度的一种度量。一个较大的标准差,代表大部分数值和其平均值之间差异较大;一个较小的标准差,代表这些数值较接近平均值
反映出数据的波动稳定情况,越大表示波动越大,约不稳定