前言
一维数据:列表与集合 列表:数据类型可以是不同的
数组:数据类型必须相同
二维数据/多维:一维/二维数据的组合,用列表
字典:键值对
numpy之——ndarray——N维数组对象
import numpy as np
ndarray:可以去掉运算之间的循环,使一维向量更像一个数据
ndarray:多维数组对象,由实际的数据和元数据两部分构成
要求所有元素类型相同,下标从0开始
np.array()生成一个ndarray数组,元素之间由空格分离
一些查看数组信息的函数后缀用例子来展示
ndarray元素类型:
bool,True or False
intc,intp,ingt8.......
float.....
complex,复数
# 数组一般的计算方式,循环列表元素
def pysum():
a = [1, 2, 3, 4]
b = [2, 3, 4, 5]
c = []
for i in range(len(a)):
c.append(a[i]**2 + b[i]**3)
print(c)# [9, 31, 73, 141]
pysum()
# 如果使用numpy,则可以进行数组之间的计算(维度相同)
import numpy as np
def npsum():
a = np.array([1, 2, 3, 4])
b = np.array([2, 3, 4, 5])
c = a**2 + b**3
print(c)# 但是为什么生成的c没有逗号?[ 9 31 73 141]
print(type(c))# <class 'numpy.ndarray'>
npsum()
[9, 31, 73, 141] [ 9 31 73 141] <class 'numpy.ndarray'>
a = np.array([[1,2,3],[4,5,6]])
print(a.ndim)# 2,纵轴上的维数
print(a.shape)# (2,3),维度
print(a.size)# 6,元素数量
print(a.dtype)# int32,元素数据类型
print(a.itemsize)# 4,每个元素的大小,以字节为单位
2 (2, 3) 6 int32 4
ndarray数组的创建与变换
ndarray数组创建四种方式:默认创建的都是浮点数
ndarray数组维度变换的两种方式:保证总体元素数量不变
ndarray数组数据类型变换:astype()
ndarray数组向列表转换:.tolist()
# (1) a = np.array(列表/元组, dtype=np.float32)
b = np.array([1,3,5,7])
print(a)
# (2) a = np.arange/ones/zeros/full/eyes()
a = np.arange(10)
print(a)
a = np.ones((2,3,4))# 两个时间段,3行四列数据
print(a)
# (3) a = np.linspace/concentrate()
a = np.linspace(1,10,4)
print(a)
c = np.concatenate((a,b))
print(c)
# (1)a = np.reshape/resize()
# reshape()不改变原数组
[[1 2 3] [4 5 6]] [0 1 2 3 4 5 6 7 8 9] [[[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]] [[1. 1. 1. 1.] [1. 1. 1. 1.] [1. 1. 1. 1.]]] [ 1. 4. 7. 10.] [ 1. 4. 7. 10. 1. 3. 5. 7.]
数组的索引与切片
索引:元素位置
切片:数组子集
# 一维数组
a = np.array([1,3,5,8,10])
print(a[0])
print(a[0:4:2])# 2为步长,0:4,实际包含0~3四个元素
# 多维数组
b = np.arange(24).reshape((2,3,4))
print(b)
print(b[1,2,3])# 第二个时间维度,第三行,第四列的元素
print(b[0,2,1])
print(b[-2,-3,-1])
print(b[:,0,3])
print(b[:,1:3,:])# 1:3实际指的是1和2两行
print(b[:,:,::3])# 可以理解为:和:3,步长为3
1 [1 5] [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] 23 9 3 [ 3 15] [[[ 4 5 6 7] [ 8 9 10 11]] [[16 17 18 19] [20 21 22 23]]] [[[ 0 3] [ 4 7] [ 8 11]] [[12 15] [16 19] [20 23]]]
数组的运算
数组运算:实际上是对数组内每个元素的运算
函数运算:数组本身并没有改变,只是生成了一个新的数组,超多函数,需要什么去搜
二元函数运算:将数组当作一个数来看待
import numpy as np
a = np.arange(24).reshape((2,3,4))
print(np.square(a))
[[[ 0 1 4 9] [ 16 25 36 49] [ 64 81 100 121]] [[144 169 196 225] [256 289 324 361] [400 441 484 529]]]
CSV文件读取
CSV文件:逗号分隔值,但只能存储一维和二维数组
将数据读入存储为CSV文件: np.savetxt(frame,array,fmt):文件,存入文件的数组,写入文件的格式
将数据从CSV文件读入数组: np.loadtxt(文件,数据类型,分隔符,)
# 写入
import numpy as np
a = np.arange(100).reshape((5,20))
np.savetxt("a.csv", a, fmt="%d", delimiter=",")# 生成的文件就在jupyternotebook下
# ".1f"浮点型
# 读入
b = np.loadtxt("a.csv", delimiter=",")
print(b)
[[ 0. 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.]]
多维数据的存取
a.tofile(文件,数据分割符,数据格式)
np.fromfile():还原为数据,要与上个函数结合使用,知道数组的维度与元素类型
都要规定数据读取或者存储的类型才行
np.save(),np.load():以npy为扩展名
a = np.arange(100).reshape(5,10,2)
a.tofile("b.bat", sep=",", format="%d")
c = np.fromfile("b.bat", dtype=np.int, sep=",")
print(c)
c = np.fromfile("b.bat", dtype=np.int, sep=",").reshape(5,2,10)
print(c)
a = np.arange(100).reshape(5,5,4)
np.save("a.npy", a)
b = np.load("a.npy")
print(b)
numpy梯度函数
np.gradient(f):斜率呗就是,两侧值和单侧值计算是不同的
最外层梯度——指的是竖着的之间的比较;第二层梯度——横着内部之间的比较
查看图像信息
pillow库:PIL
图像:像素组成的二维矩阵,如例子所示 ,(高度,宽度,RGB值)
图像变换
读入图像—获得RGB值—修改后保存为新文件: 对RGB修改进行色彩任意的变换
from PIL import Image
import numpy as np
aim = np.array(Image.open("C:\\Users\\YMJ\\Pictures\\Saved Pictures\\2.jpg"))
print(aim.shape,aim.dtype)
print(aim)# 每个像素的高度,宽度,RGB的值
b = [255,255,255] - aim
print(b)
bim = Image.fromarray(b.astype("uint8"))
bim.save("C:\\Users\\YMJ\\Pictures\\Saved Pictures\\b.jpg")
cim = np.array(Image.open("C:\\Users\\YMJ\\Pictures\\Saved Pictures\\2.jpg").convert("L"))
# 灰度值
d = 255 - cim
print(d)
dim = Image.fromarray(d.astype("uint8"))
dim.save("C:\\Users\\YMJ\\Pictures\\Saved Pictures\\d.jpg")