import numpy as np
import random
# 这两个效果是一样的,np.arange()是numpy自带的
n1 = np.array(range(20))
n2 = np.arange(20)
# 查看数据类型
print(n2.dtype)
# 指定数据类型
n3 = np.array(range(5), dtype='float32')
print(n3.dtype)
# 装换数据类型,转换成数组类型
n4 = n3.astype(np.bool)
print(n4)
# 生成随机小数
n5 = np.array([random.random() for i in range(10)])
print(n5)
# numpy取小数,取三位小数
n6 = np.round(n5, 3)
print(n6)
# 查看数组形状,就是数组几行几列
n7 = np.array([[1, 2, 3, 4], [5, 6, 9, 7]])
print(n7.shape)
# 修改数组形状,改成3行5列数组
n8 = np.array(range(15))
n9 = n8.reshape(3, 5)
print(n9)
# 把多维数组展开成一维数组
print(n9.flatten())
# *****************数组计算*****************
# 数组每个元素都加三
print(n8 + 3)
# 如果两个数字形状一样,两个数组计算就是数组每个位置元素计算
n10 = np.arange(24).reshape(3, 8)
n11 = np.arange(100, 124).reshape(3, 8)
print(n10 + n11)
# numpy转置:就是一种变换,对于numpy数组来说,就是在对角线数据交换数据,目的是为了更方便处理数据,通俗一点就行换成列
n12 = np.arange(6, 6 + 24).reshape(4, 6)
# 效果一样的
n12 = n12.T
n12 = n12.transpose()
print("*" * 100)
print(n12)
# numpy取行,数组直接中括号,数值就可以了
print("*" * 100)
print(n12[2:])
# 取不连续多行,需要两个中括号
print(n12[[1, 3]])
# 取列,逗号前面是行,后面是列
print(n12[:, 1])
# 取连续多列
print(n12[:, 2:])
# 取不连续多列
print(n12[:, [1, 3]])
# 取多个不相邻的点,0和1一个点,1和2一个点,2和5一个点
n13 = np.arange(6, 6 + 24).reshape(4, 6)
print(n13[[0, 1, 2], [1, 2, 5]])
import numpy as np
# 数组元素大于30赋值10
n1 = np.arange(15, 45).reshape(5, 6)
print(n1 > 30)
n1[n1>30] = 10
print(n1)
import numpy as np
# 在numpy中where使用
# 把t中小于10数字替换成0,把大于20替换为20
t = np.arange(30).reshape(5, 6)
# numpy三元运算符,t>10赋值0,其它值赋值100
t2 = np.where(t > 10, 0, 100)
print(t2)
import numpy as np
# clip裁剪,小于10替换成10,大于18替换成18
t = np.arange(30).reshape(5, 6)
t2 = t.clip(10, 18)
print(t2)
import numpy as np
# 垂直拼接
t1 = np.arange(12).reshape(2, 6)
t2 = np.arange(12, 24).reshape(2, 6)
print(t1)
print(t2)
t3 = np.vstack((t1, t2))
print(t3)
# 水平拼接
t4 = np.hstack((t1, t2))
print(t4)
import numpy as np
# 快速创建全0数组
t1 = np.zeros((3, 4))
print(t1)
# 快速创建全1数组
t2 = np.ones((3, 4))
print(t2)
import numpy as np
t1 = np.arange(30).reshape(5, 6)
# axis=0表示列,axis=1表示行,表示每列最大值位置
t2 = np.argmax(t1, axis=0)
t3 = np.argmin(t1, axis=0)
print(t2)