2023.1.3 numpy中,加减乘除、数据分析的一些函数、关于维度的一些函数
import numpy as np
a = np.array([150, 166, 183, 170])
print("a + 3:", a + 3)
print("a - 3:", a - 3)
print("a * 3:", a * 3)
print("a / 3:", a / 3)
a + 3: [153 169 186 173]
a - 3: [147 163 180 167]
a * 3: [450 498 549 510]
a / 3: [50. 55.33333333 61. 56.66666667]
+-*/
都是对应元素运算a = np.array([
[1, 2],
[3, 4]
])
b = np.array([
[5, 6],
[7, 8]
])
print("a + b:\n", a + b)
print("a - b:\n", a - b)
print("a * b:\n", a * b)
print("a / b:\n", a / b)
a + b:
[[ 6 8]
[10 12]]
a - b:
[[-4 -4]
[-4 -4]]
a * b:
[[ 5 12]
[21 32]]
a / b:
[[0.2 0.33333333]
[0.42857143 0.5 ]]
dot
另一个;2)用 np.dot(a, b)
把两个矩阵包起来。np.outer()
矩阵外积,np.inner()
矩阵内积 (和 np.dot() 的用法稍稍有些不同,你可以理解成 np.dot(a, b)= np.inner(a, b.T), 把 b 做一次转置)。a = np.array([
[1, 2],
[3, 4]
])
b = np.array([
[5, 6],
[7, 8]
])
print(a.dot(b))
print(np.dot(a, b))
[[19 22]
[43 50]]
[[19 22]
[43 50]]
np.max() np.min()
:找到最大值最小值了a = np.array([
[1, 2],
[3, 4]
])
print("最大:", np.max(a))
print("最小:", a.min())
最大: 4
最小: 1
np.sum()
:所有值累加print(a.sum())
10
np.prod()
:累乘print("累乘:", a.prod())
print("总数:", a.size)
累乘: 24
总数: 4
均值,中位数
month_salary = [1.2, 20, 0.5, 0.3, 2.1]
print("平均工资:", np.mean(month_salary))
print("工资中位数:", np.median(month_salary))
平均工资: 4.82
工资中位数: 1.2
standard deviation 标准差,用来描述正态分布
month_salary = [1.2, 20, 0.5, 0.3, 2.1]
print("标准差:", np.std(month_salary))
标准差: 7.61614075500184
其实你不关心 np.max() 或者 np.min() 的数值是多少,而是关心对应的谁
用 np.argmax()
和 np.argmin()
就能搞定。其实返回的是坐标
a = np.array([150, 166, 183, 170])
print("最大坐标:", np.argmax(a))
print("最小坐标:", np.argmin(a))
最大坐标: 2
最小坐标: 0
b = np.array([
[11, 211],
[31, 41]
])
print("最大:", np.argmax(b))
print("最小:", np.argmin(b))
最大: 1
最小: 0
所以要只能哪个方向的
b = np.array([
[11, 211],
[31, 41]
])
print("每列最大:", np.argmax(b,axis=0))
print("每行最大:", np.argmax(b,axis=1))
每行最大: [1 0]
每列最大: [1 1]
第一列最大是31
,所以返回1
;第二列最大211
,所以返回0
a = np.array([150.1, 166.4, 183.7, 170.8])
print("ceil:", np.ceil(a))
print("floor:", np.floor(a))
ceil: [151. 167. 184. 171.]
floor: [150. 166. 183. 170.]
也就是低过阈值或高于阈值 用上下限代替
a = np.array([150.1, 166.4, 183.7, 170.8])
print("clip:", a.clip(160, 180))
clip: [160. 166.4 180. 170.8]
–
https://blog.csdn.net/weixin_41261833/article/details/103762874
最关键信息就是:
0
是最高纬度、1
是较高纬度… ;数字越大,相对维度越低;并不是特定值行还是列,是随着数据变化,所代表的也在变化
axis=0
:就是沿最高维度的方向改变,其他维度不变
【实例讲解】
x=np.arange(24).reshape(2,3,4)
x
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]]])
print(x.sum(axis=0),x.sum(axis=0).shape)
[[12 14 16 18]
[20 22 24 26]
[28 30 32 34]] (3, 4)
【老羊讲解】
(2,3,4)
中2
是最高维,所以axis=0
时,只有最高维变化(消失)。[[A],[B]]
,那我们求sum
,就是A,B
每项对应相加。print(x.sum(axis=1),x.sum(axis=1).shape)
[[12 15 18 21]
[48 51 54 57]] (2, 4)
【老羊讲解】
(2,3,4)
中3
是次高维,所以axis=1
时,只有次高维变化(消失)。axis=1
,就是对【列方向】上变化,就是对【列方向】求sum
。print(x.sum(axis=2),x.sum(axis=2).shape)
[[ 6 22 38]
[54 70 86]] (2, 3)
【老羊讲解】
(2,3,4)
中4
最低维,所以axis=2
时,只有最低维变化(消失)。axis=2
,就是对【行方向】上变化,就是求【行方向】sum
。cars = np.array([
[5, 10, 12, 6],
[5.1, 8.2, 11, 6.3],
[4.4, 9.1, 10, 6.6]
])
print("数据:\n", cars, "\n维度:", cars.ndim)
数据:
[[ 5. 10. 12. 6. ]
[ 5.1 8.2 11. 6.3]
[ 4.4 9.1 10. 6.6]]
维度: 2
print("总共多少测试数据:", cars.size)
总共多少测试数据: 12
print("第一个维度:", cars.shape[0])
print("第二个维度:", cars.shape[1])
print("所有维度:", cars.shape)
第一个维度: 3
第二个维度: 4
所有维度: (3, 4)
np.concatenate():
默认是在最高纬度上添加test1 = np.array([5, 10, 12, 6])
test2 = np.array([5.1, 8.2, 11, 6.3])
# 首先需要把它们都变成二维,下面这两种方法都可以加维度
test1 = np.expand_dims(test1, 0)
test2 = test2[np.newaxis, :]
print("test1加维度后 ", test1)
print("test2加维度后 ", test2)
# 然后再在第一个维度上叠加
all_tests = np.concatenate([test1, test2])
print("括展后\n", all_tests)
test1加维度后 [[ 5 10 12 6]]
test2加维度后 [[ 5.1 8.2 11. 6.3]]
括展后
[[ 5. 10. 12. 6. ]
[ 5.1 8.2 11. 6.3]]
print("第一维度叠加:\n", np.concatenate([all_tests, all_tests], axis=0))
print("第二维度叠加:\n", np.concatenate([all_tests, all_tests], axis=1))
第一维度叠加:
[[ 5. 10. 12. 6. ]
[ 5.1 8.2 11. 6.3]
[ 5. 10. 12. 6. ]
[ 5.1 8.2 11. 6.3]]
第二维度叠加:
[[ 5. 10. 12. 6. 5. 10. 12. 6. ]
[ 5.1 8.2 11. 6.3 5.1 8.2 11. 6.3]]
np.concatenate():
**这种方法就是维度要对其,对不其合并失败报错a = np.array([
[1,2,3],
[4,5,6]
])
b = np.array([
[7,8],
[9,10]
])
print(np.concatenate([a,b], axis=1)) # 这个没问题
print(np.concatenate([a,b], axis=0)) # 这个会报错
np.concatenate(),还有两个比较好用的在二维数据上可以方便调用的功能,分别是 np.vstack(), np.hstack()
.
a = np.array([
[1,2],
[3,4]
])
b = np.array([
[5,6],
[7,8]
])
print("竖直合并\n", np.vstack([a, b]))
print("水平合并\n", np.hstack([a, b]))
竖直合并
[[1 2]
[3 4]
[5 6]
[7 8]]
水平合并
[[1 2 5 6]
[3 4 7 8]]