复制以下的代码,选择运行的函数,验证有关数组的操作。
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
原谅我没有找到电子版,不然一定爬下来
解释和输出都在注释中
# -*- coding: utf-8 -*-
import numpy as np
# 创建数组的相关操作----------------------------------------------------------------------------------------
def arrayTest():
"""
核心对象ndarray,称为n维数组,由同质元素组成,元素数量是事先定义好的
同质是指元素的类型相同,即数组的dtype属性,此属性可以指定
以下为使用array()函数创建numpy数组的实例
"""
# 创建一维数组
aArray = np.array([1, 2, 3])
print(type(aArray)) # <class 'numpy.ndarray'>
print(aArray.ndim) # 秩,数组的维数 1
print(aArray.size) # 元素的个数 3
print(aArray.shape) # 数组的形状,返回类型为元组 (3,)
print(aArray.dtype) # 数组的元素类型 int32
print(aArray.itemsize) # 元素占用的字节数 4
# 创建二维数组
bArray = np.array([[1, 2, 3], [4, 5, 6]])
print(bArray.ndim)
print(bArray.size)
print(bArray.shape) # (2,3)
print(bArray.dtype)
print(bArray.itemsize) # 4
# 制定类型
cArray = np.array([[1, 2, 3], [4, 5, 6]], dtype=np.int64)
print(cArray.dtype) # int64
# 创建数组的其他方法----------------------------------------------------------------------------------------
def createAnArray():
"""
除了array()函数创建数组,还有其它多种函数
如果在交互式的模式下,如python终端,IDLE等,在不用print函数的情况下,输出时行和列之间加逗号 ','
若用print函数输出则行和列之间不加逗号 ','
"""
# arange(start=None, stop, step=None, , dtype=None),与array()功能类似,但支持浮点数
Array1 = np.arange(10.0)
print(Array1) # [0. 1. 2. 3. 4. 5. 6. 7. 8. 9.]
# linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None, axis=0)
# 创建一个指定的起止值,等分数的等差数组,num为数组元素个数
Array2 = np.linspace(1, 10, 4)
print(Array2) # [ 1. 4. 7. 10.]
# ones(shape, dtype=None, order='C')创建全1数组
Array3 = np.ones(shape=5)
print(Array3) # [1. 1. 1. 1. 1.]
Array4 = np.ones((2, 3)) # 创建两行三列的全1数组
print(Array4)
# [[1. 1. 1.]
# [1. 1. 1.]]
# zeros(hape, dtype=float, order='C')创建全0数组
Array5 = np.zeros((2, 3))
print(Array5)
# [[0. 0. 0.]
# [0. 0. 0.]]
# full(shape, fill_value, dtype=None, order='C')创建每个元素都是full_value的数组
Array6 = np.full((3, 4), 2)
print(Array6)
# [[2 2 2 2]
# [2 2 2 2]
# [2 2 2 2]]
# eye(N, M=None, k=0, dtype=float, order='C')创建N行,M列的单位数组
# M省略时,创建N行,N列的单位数组
Array7 = np.eye(3, dtype=int)
print(Array7)
# [[1 0 0]
# [0 1 0]
# [0 0 1]]
Array8 = np.eye(3, 5, dtype=int)
print(Array8)
# [[1 0 0 0 0]
# [0 1 0 0 0]
# [0 0 1 0 0]]
# random.rand(d0,d1,...,dn)创建n维数组,元素为0~1之间的随机小数
Array9 = np.random.rand(2, 3)
print(Array9)
# [[0.23277296 0.21518778 0.62794264]
# [0.11016466 0.26008708 0.08924181]]
# 数组的相关运算------------------------------------------------------------------------------------------
def basicOperation():
"""
数组的基本运算,与列表不同,列表是元素个数的变化,而这是元素数值的变化
除了相同形状的数组可以进行运算外,不同形状的数组也可以进行相关运算
Array4对Array3进行广播计算,即对Array3的每一行都做运算,前提是两数组要 “形状兼容”
"""
Array1 = Array2 = np.ones((2, 3), dtype=int)
print(Array1+Array2)
# [[2 2 2]
# [2 2 2]]
print(Array1-Array2)
# [[0 0 0]
# [0 0 0]]
print(Array1*Array2)
# [[1 1 1]
# [1 1 1]]
print(Array1/Array2)
# [[1. 1. 1.]
# [1. 1. 1.]]
Array3 = np.ones((2, 3), dtype=int)
Array4 = np.arange(3)
print(Array3+Array4)
# [[1 2 3]
# [1 2 3]]
print(Array3+Array4 > 2)
# [[False False True]
# [False False True]]
print(Array3 < Array4)
# [[False False True]
# [False False True]]
# 数组和普通值的计算
print(Array3+1)
# [[2 2 2]
# [2 2 2]]
print(Array3*5)
# [[5 5 5]
# [5 5 5]]
# 数组的切片和索引-----------------------------------------------------------------------------------------
def theIndexSection():
"""
ndarray与序列一样也可以进行索引和切片的操作,方式与序列类似
ndarray可以在不同的维度上进行
"""
room = np.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]]])
# room数组是一个2*3*4的三维数组,想象成两层楼,每层又有3行4列
print(room)
# [[[0 1 2 3]
# [4 5 6 7]
# [8 9 10 11]]
# [[12 13 14 15]
# [16 17 18 19]
# [20 21 22 23]]]
# 输出0层楼0行0列房间的内容
print(room[0, 0, 0]) # 0 也可以写成room[0][0][0]
# 如果不关心楼层,输出每一层的0行0列的内容,可以将楼层用冒号 ':' 代替
print(room[:, 0, 0]) # [ 0 12]
# 同理,还有很多切片方式,获取指定位置信息
print(room[0, :, :])
# [[0 1 2 3]
# [4 5 6 7]
# [8 9 10 11]]
print(room[0, 1, :]) # [4 5 6 7]
# 选定间隔的房间
print(room[0, 1, 0:4:2]) # [4 6] 获取第0层,1行,第0列和第2列的内容 0,4,2依次为起始,终止,步长
# 改变数组的形状------------------------------------------------------------------------------------------
def formChange():
# reshape(shape)函数改变数组的形状,返回一个指定形状的数组,不会改变原数组
Array1 = np.arange(12)
Array2 = Array1.reshape((2, 6))
print(Array2)
# [[0 1 2 3 4 5]
# [6 7 8 9 10 11]]
Array3 = Array1.reshape((2, 2, 3))
print(Array3)
# [[[0 1 2]
# [3 4 5]]
# [[6 7 8]
# [9 10 11]]]
print(Array1) # [ 0 1 2 3 4 5 6 7 8 9 10 11]
# resize(new_space)直接改变原数组,返回空值
Array1.resize((3, 4))
print(Array1)
# [[0 1 2 3]
# [4 5 6 7]
# [8 9 10 11]]
print(type(Array1)) # < class 'numpy.ndarray' >
print(type(Array1.resize((3, 4)))) # <class 'NoneType'>
# transpose(*axes)函数实现对数组按轴进行转置,即维度的变换,返回转置后的新数组
Array4 = Array1.transpose()
print(Array4)
# [[0 4 8]
# [1 5 9]
# [2 6 10]
# [3 7 11]]
print(Array1)
# [[0 1 2 3]
# [4 5 6 7]
# [8 9 10 11]]
# 若参数为空,则默认为完全转置,当要按指定维度进行转置时,可用元组方式重新编排轴的顺序
# 0,1,2 分别代表着 层,行,列
Array5 = np.arange(24).reshape((2, 3, 4))
print(Array5)
# [[[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(Array5.transpose()) # 完全转置,轴的顺序变为(2,1,0)
# [[[0 12]
# [4 16]
# [8 20]]
# [[1 13]
# [5 17]
# [9 21]]
# [[2 14]
# [6 18]
# [10 22]]
# [[3 15]
# [7 19]
# [11 23]]]
print(Array5.transpose(0, 2, 1)) # 行列转置
# [[[0 4 8]
# [1 5 9]
# [2 6 10]
# [3 7 11]]
# [[12 16 20]
# [13 17 21]
# [14 18 22]
# [15 19 23]]]
# flatten()函数用来展平数组,即把高纬度数组转换为一维数组,返回一个新的一维数组
Array6 = np.arange(6).reshape(2, 3)
print(Array6)
# [[0 1 2]
# [3 4 5]]
Array7 = Array6.flatten()
print(Array7) # [0 1 2 3 4 5]
print(Array6)
# [[0 1 2]
# [3 4 5]]
# 数组的相关计算------------------------------------------------------------------------------------------
def statistical():
"""
sum() 按指定轴返回数组元素的和
mean() 按指定轴返回数组元素的均值
max() 按指定轴返回数组元素的最大值
min() 按指定轴返回数组元素的最小值
std() 按指定轴返回数组元素的标准差
argmin() 按指定轴返回数组元素最小元素对应的索引构成的数组
argmax() 按指定轴返回数组元素最大元素对应的索引构成的数组
cumsum() 按指定轴返回数组元素的累积的和
cumprod() 按指定轴返回数组元素的累积的积
"""
Array = np.arange(6).reshape((2, 3))
print(Array.sum()) # 求所有元素的和 15
print(Array.sum(axis=0)) # 按0轴方向求和,即按行求和,并组成新数组返回 [3 5 7]
print(Array.sum(axis=1)) # 按1轴方向求和,即按列求和,并组成新数组返回 [ 3 12]
print(Array.max()) # 5
print(Array.max(axis=0)) # [3 4 5]
print(Array.max(axis=1)) # [2 5]
print(Array.cumsum(axis=0)) # 按0轴方向累积求和,即当前行是前面所有元素的和
# [[0 1 2]
# [3 5 7]]
print(Array.cumsum(axis=1)) # 按1轴方向累积求和,即当前列是前面所有元素的和
# [[0 1 3]
# [3 7 12]]
# 选择要验证的函数-----------------------------------------------------------------------------------------
def main():
# arrayTest()
# createAnArray()
# basicOperation()
# theIndexSection()
# formChange()
# statistical()
if __name__ == "__main__":
main()
相关参考:Python语言程序设计(上海交通大学出版社 赵璐主编)<<----传送门
如有错误,欢迎私信纠正
技术永无止境,谢谢支持!