python的numpy模块

ndarray 数据类型:
        整型: int, int8(i1), int16(i2), int32(i4), int64(i8)
        无符号整形: uint8(u1), uint16(u2), uint32(u4), uint64(u8)
        浮点型: float16(f2), float32(f4), float64(f8)
        字符型: string_ (S)
        布尔型: bool(b)
        优先级 str > float > int (函数中有int和float类型都会转化为float类型)

ndarray数组创建 array

l = [1, 2, 4, 5, 6, 7, 8, 9, 0]
n = np.array(l)
print(n, type(n), sep = "\t")   #   [1 2 4 5 6 7 8 9 0] 	<class 'numpy.ndarray'>

n1 = np.array([3.14, 3, 3, 5.02])
print(n1, n1.dtype, type(n1), sep = '\t')  #  [3.14 3.   3.   5.02]	float64	<class 'numpy.ndarray'>

n2 = np.array([3.14, 'hello', 4])
print(n2, n2.dtype, type(n2), sep = "\t")    #    ['3.14' 'hello' '4']	<U32	<class 'numpy.ndarray'>

np的routies函数创建

np.ones(shape, dtype, order) 创建一个所有元素都为1的多维数据
shape: 创建数组的大小
dtype : 创建的数据类型
order : {'C', 'F'}, 可选, 默认值: C 是否在内存中以行优先(C 样式)或列优先(Fortran 样式)顺序存储多维数据。

mat = np.ones([3,4], dtype = np.int16)
print(mat)
print(mat.shape, mat.dtype,sep = '\t')


运行结果
[[1 1 1 1]
 [1 1 1 1]
 [1 1 1 1]]
(3, 4)	int16

np.zero(shape, dtype, order) 创建一个所有元素都为0的多维数据
shape : 创建数组的大小
dtype : 创建数组数据类型
order : {'C', 'F'}, 可选, 默认值: C 是否在内存中以行优先(C 样式)或列优先(Fortran 样式)顺序存储多维数据。

mat1 = np.zeros([4, 3], dtype = np.uint32)
print(mat1, mat1.shape, mat1.dtype, sep = "\t")


运行结果
[[0 0 0]
 [0 0 0]
 [0 0 0]
 [0 0 0]]	(4, 3)	uint32

np.full(shape, fill_value = None, order = 'C')
shape : 创建数组的大小
dtype : 创建数组数据类型
order : {'C', 'F'}, 可选, 默认值: C 是否在内存中以行优先(C 样式)或列优先(Fortran 样式)顺序存储多维数据。

mat2 = np.full(shape = [4, 3], fill_value = 4)
print(mat2, mat2.shape, mat2.dtype)


运行结果
[[4 4 4]
 [4 4 4]
 [4 4 4]
 [4 4 4]] (4, 3) int32

创建一个单位矩阵
np.eye(N, M, k = 0, dtype)
N: 表示行数
M: 表示列数
k: 表示偏移多少个值
dtype: 表示类型

eye1 = np.eye(10, 10, k = 1, dtype = np.int32)
print(eye1)

运行结果
[[0 1 0 0 0 0 0 0 0 0]
 [0 0 1 0 0 0 0 0 0 0]
 [0 0 0 1 0 0 0 0 0 0]
 [0 0 0 0 1 0 0 0 0 0]
 [0 0 0 0 0 1 0 0 0 0]
 [0 0 0 0 0 0 1 0 0 0]
 [0 0 0 0 0 0 0 1 0 0]
 [0 0 0 0 0 0 0 0 1 0]
 [0 0 0 0 0 0 0 0 0 1]
 [0 0 0 0 0 0 0 0 0 0]]

np.linspace(start, stop, num, endpoint, restep, dtype)
start: 开始数据
stop: 结束数据
num : 开始到结束有多少个数
endpoint: 是否包含结束值
retstep : 是否返回步长
dtype: 表示类型

equal_different = np.linspace(1, 100, 99, endpoint = False, retstep= False, dtype = np.float32)
print(equal_different)

[ 1.  2.  3.  4.  5.  6.  7.  8.  9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36.
 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54.
 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72.
 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90.
 91. 92. 93. 94. 95. 96. 97. 98. 99.]

迭代数
np.arange(start, stop, step, dtype)
start : 开始的数据
stop : 结束的数据
step : 步长
dtype : 表示类型

print(np.arange(1, 100, 3, dtype = np.int32))

运行结果
[ 1  4  7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 64 67 70
 73 76 79 82 85 88 91 94 97]

随机数
np.random.randint(low, high, size, dtype) 生成low~high 的随机整数
low: 随机的最小范围
high : 随机的最大范围
size : 矩阵的大小
dtype: 类型

np.random.randn(d1, d2, d3, ...) 生成标准正态分布 mean = 0, variance = 1

dn:表示n为数据维度

np.random.normal(loc = 0.0, scale = 1.0, size = None) 正态分布
loc 设置均值
scale 设置标准差
size 数组的大小

np.random.random(size = None) 0~1左闭右开
size 数组的大小

np.random.rand(d0, d1, d2, d3...) 0~1左闭右开
dn:表示n为数据维度

print(np.random.randint(1, 100, [4, 3], dtype = np.int32))

print(np.random.randn(10))

print(np.random.normal(10, 100, [4, 3]))

print(np.random.random([4, 3]))

print(np.random.rand(3))

运行结果

[[88 59 31]
 [12 60 64]
 [78 56  1]
 [57 99 33]]


[-0.15406983 -0.88448019 -1.51401254 -0.87255222 -1.35761635  0.46479609
  0.80304423  0.23123112 -0.12478477  0.18392227]


[[ -44.74587405 -139.79543522   16.03411604]
 [  40.13010034   32.05397835   57.64575227]
 [  -0.584161    147.48423436 -118.35407941]
 [   1.61221886   32.62856579 -117.69078916]]


[[0.38389696 0.52576674 0.8813099 ]
 [0.48278753 0.24980853 0.70270774]
 [0.73416502 0.64101706 0.23828767]
 [0.16902304 0.77243354 0.5101739 ]]


[0.41402817 0.17397814 0.46619177]

ndarray 属性
ndim 查看维度
shape 查看形状
size 总长度
dtype 元素类型

rnd = np.random.randint(1, 100, [4, 5], dtype = np.int32)
print(rnd.ndim, rnd.shape, rnd.size, rnd.dtype, sep = "\n")  

运行结果
2
(4, 5)
20
int32

三、 ndarray 的基本操作

一、 索引
    l = [1, 2, 3, 4, 5, 6, 7]
    n = np.array(l)
    print(n[-1], n[3])

    
    li = np.random.randint(1, 10, [3, 4, 2], dtype=np.int32)
    print(li, li[:1, :, :], li[2, 3, 0], li[1,[1,3],0], sep="\n")
    li[1,[1,3],0]  取出不连续的值
    切片 [start: end: step]

    
    arr1 = np.random.randint(1, 10, [2, 28, 28, 3], dtype = np.int32)
    arr2 = arr1[:,1:14, ::2, 1]
    print(arr2, arr2.shape)

    修改数据
    arr1[1,3,3,0] = 88000
    
ndarray变形: reshape

mat3 = np.random.normal(loc = 0, scale = 1, size = [4, 28, 28, 3])

mat1 = np.reshape(mat3, (4, 784, 3))
print(mat1.shape)

ndarray级联: concatenate/ hstack/ vstack

n1 = np.random.randint(1, 100, (3, 4))
n2 = np.random.randint(1, 100, (3, 4))

print(np.concatenate((n1, n2), axis=0))   #  按照一维进行合并
print(np.concatenate((n1, n2), axis=1))   #  按照二维进行合并

print(np.vstack((n1, n2)))   # 上下合并
print(np.hstack((n1, n2)))  # 左右合并

ndarray拆分: split, vsplit, hsplit

n3 = np.random.randint(1, 100, (6, 4))
'''
ndarray   要拆分的数组
indices_or_sections    拆分的次数
axis   对象的维度
'''
print(np.split(n3, 3))

print(np.vsplit(n3, 3))    # 上下拆分

print(np.hsplit(n3, 2))    # 左右拆分


拷贝 copy   (深拷贝)


n1 = np.arange(1, 10)
n2 = n1.copy()
n2[2] = 100
print(n1, n2)

Numpy 矩阵的操作

算法运算数: 加减乘除 矩阵的之间的运算 数与矩阵的乘法
矩阵的乘积: 矩阵和矩阵相乘np.dot() 矩阵的逆 : np.linalg.inv()
矩阵的行列式: np.linalg.det() 矩阵的秩 : np.linalg.inv()
矩阵的特征值: np.linalg.eig()
广播机制:
为不同维度矩阵提供运算的可能性
规则1: 为缺失的维度补维度
规则2: 缺失维度的值用已有值填充

n1 = np.random.randint(0, 10, size = (4, 5))
print(n1)
print(n1 + 10, n1 - 10, n1 * 10, n1 / 10, n1 // 3, n1 ** 2, n1 % 2, sep = "\n")

n2 = np.random.randint(0, 10, size = (4, 5))

print(n1 + n2, n1 - n2, sep = "\n")

n3 = np.random.randint(0, 10, size = (5, 3))
print(np.dot(n1, n3))

n4 = np.array([[1, 2, 3], [4, 2, 6], [2, 9, 4]])
print(n4)
print(np.linalg.inv(n4))

print(np.linalg.det(n4))

print(np.linalg.matrix_rank(n4))

print(np.linalg.eig(n4))

numpy 几个操作:
求和: sum(), 最小值:min()  最大值:max()  平均值: mean()   平均值:average()   中位数: median()
百分比: percentile()   最小值对应下标: argmin()   最大值对应下标: argmax()
标准差: std()   方差:var()   幂: power()     按条件查找(True, False): argwhere()

n1 = np.random.randint(1, 100, (10, 5))

print(np.sum(n1), np.min(n1), np.max(n1), np.mean(n1), np.average(n1), np.median(n1))

print(np.std(n1), np.var(n1))

print(np.argmin(n1), np.argmax(n1),sep = "\n")

print(np.argwhere([76, 45, 23, 1] == np.min(n1)))

n2 = np.random.randint(1, 10, 8)

print(np.percentile(n2, q = 10))

print(np.power(123, 3))



运行结果
2853 3 98 57.06 57.06 62.0
29.103546175681064 847.0164
41
28
[]
1.0
1860867

其他常见的数学操作
abs() 绝对值 sqrt() 平方根 square() 次方 exp() e的次方
sin() cos() tan() 取整(round() 四舍五入 ceil() 向无穷大取整 floor 向无穷小取整)
cumsum() 累加 log() 自然对数 (np.log()以e为底, np.log2() 以2为底 np.log10() 以10为底)
sort() 排序

文件操作:
save: 保存ndarray到npy文件
savez: 将多个array保存到一个npy文件
load: 读取npy文件

存储csv或txt
savetxt(file, delimiter) delimiter 分隔符
读取csv或txt
loadtxt(file, delimiter)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值