NumPy学习2

继续学习NumPy
numpy_test2.py :
import numpy
import numpy as np

'''
4, Numpy创建数组
除了使用 array() 方法外,NumPy 还提供了其他创建 ndarray 数组的方法。

1) numpy.empty()
numpy.empty() 创建未初始化的数组,可以指定创建数组的形状(shape)和数据类型(dtype),语法格式如下:
numpy.empty(shape, dtype = float, order = 'C')

它接受以下参数:
shape:指定数组的形状;如 (3,3) : 三行三列数组
dtype:数组元素的数据类型,默认值是值 float;
order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
        “C”代表以行顺序存储,“F”则表示以列顺序存储
'''
print("-----------numpy.empty()-------------")
arr1 = np.empty((3,3), dtype=int)
print('arr1 :', arr1)
'''
arr1 : [[1064435968 -637534208 1836412421]
 [  19495280 1869416154 1701606756]
 [       867          0        768]]

可以看到,numpy.empty() 返回的数组带有随机值,但这些数值并没有实际意义。
切记 empty 并非创建空数组。
'''

'''
2) numpy.zeros()
该函数用来创建元素均为 0 的数组,同时还可以指定被数组的形状,语法格式如下:
numpy.zeros(shape,dtype=float,order="C")

参数说明
参数名称    说明描述
shape:指定数组的形状大小。
dtype:可选项,数组的数据类型,默认值是值 float。
order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
        “C”代表以行顺序存储,“F”则表示以列顺序存储
'''
print("-----------numpy.zeros()-------------")
#默认数据类型为浮点数
arr2 = np.zeros(6)
print('arr2 :', arr2)
arr3 = np.zeros((3,3), dtype=int)
print('arr3 :', arr3)
'''
arr2 : [0. 0. 0. 0. 0. 0.]
arr3 : [[0 0 0]
 [0 0 0]
 [0 0 0]]
numpy.zeros() 跟 numpy.empty() 类似,只是创建的数组初始值为0.
'''

'''
3) numpy.ones()
返回指定形状大小与数据类型的新数组,并且新数组中每项元素均用 1 填充,语法格式如下:
numpy.ones(shape, dtype = None, order = 'C')

参数说明
参数名称    说明描述
shape:指定数组的形状大小。
dtype:可选项,数组的数据类型,默认值是值 float。
order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
        “C”代表以行顺序存储,“F”则表示以列顺序存储
'''
print("-----------numpy.ones()-------------")
arr4 = np.ones((3, 3), dtype=int)
print('arr4 :', arr4)
'''
arr4 : [[1 1 1]
 [1 1 1]
 [1 1 1]] 
numpy.ones() 跟 numpy.zeros() 类似,只是创建的数组初始值为1.
'''

'''
4) numpy.asarray()
asarray() 与 array() 类似,但是它比 array() 更为简单。
asarray() 能够将一个 Python 序列转化为 ndarray 对象,语法格式如下:
numpy.asarray(sequence,dtype = None ,order = None)

参数说明
参数名称    说明描述
sequence:接受一个 Python 序列,可以是列表或者元组;
dtype:可选项,数组的数据类型,默认值是Python原序列的数据类型。
order:指数组元素在计算机内存中的储存顺序,默认顺序是“C”(行优先顺序)。
        “C”代表以行顺序存储,“F”则表示以列顺序存储
'''
print("-----------numpy.asarray()-------------")
# 将列表转化为 numpy 数组:
pyList = [1, 2, 4, 6, 7, 9]
arr5 = np.asarray(pyList)
print('type(arr5) :', type(arr5))
print('arr5 :', arr5)
'''
type(arr5) : <class 'numpy.ndarray'>
arr5 : [1 2 4 6 7 9]
'''

# 使用元组创建 numpy 数组:
pyTuple = (1.1, 2.3, 4.3, 6.2, 7.8, 9.0)
arr6 = np.asarray(pyTuple)
print('type(arr6) :', type(arr6))
print('arr6 :', arr6)
'''
type(arr6) : <class 'numpy.ndarray'>
arr6 : [1.1 2.3 4.3 6.2 7.8 9. ]
'''

# 使用嵌套列表创建多维数组:
pyListArray = [[1, 2, 3], [6, 5, 4], [3, 6, 9]]
arr7 = np.asarray(pyListArray)
print('type(arr7) :', type(arr7))
print('arr7 :', arr7)
'''
type(arr7) : <class 'numpy.ndarray'>
arr7 : [[1 2 3]
 [6 5 4]
 [3 6 9]]
'''

'''
5) numpy.frombuffer()
表示使用指定的缓冲区创建数组。下面给出了该函数的语法格式:
numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)

参数说明
参数名称    说明描述
buffer:将任意对象转换为流的形式读入缓冲区;
dtype:返回数组的数据类型,默认是 float32;
count:要读取的数据数量,默认为 -1 表示读取所有数据;
offset:读取数据的起始位置,默认为 0。
'''
print("-----------numpy.frombuffer()-------------")
#字节串类型
strList = b'PandaCode'
print('type(strList) :', type(strList))
print('strList :', strList)
arr8 = np.frombuffer(strList, dtype = "S1")
print('type(arr8) :', type(arr8))
print('arr8 :', arr8)
'''
type(strList) : <class 'bytes'>
strList : b'PandaCode'
type(arr8) : <class 'numpy.ndarray'>
arr8 : [b'P' b'a' b'n' b'd' b'a' b'C' b'o' b'd' b'e']
'''

'''
6) numpy.fromiter()
该方法可以把迭代对象转换为 ndarray 数组,其返回值是一个一维数组。
numpy.fromiter(iterable, dtype, count = -1)

参数说明
参数名称    说明描述
iterable:    可迭代对象。
dtype:    返回数组的数据类型。
count:    读取的数据数量,默认为 -1,读取所有数据。
'''
print("-----------numpy.fromiter()-------------")
# 使用 range 函数创建列表对象
list1 = range(8)
#print('list1 :',list1)
#生成可迭代对象i
iter1 = iter(list1)
#print('iter1 :',iter1)
#使用i迭代器,通过fromiter方法创建ndarray
arr9 = np.fromiter(iter1, dtype=float)
print('type(arr9) :', type(arr9))
print('arr9 :', arr9)
'''
type(arr9) : <class 'numpy.ndarray'>
arr9 : [0. 1. 2. 3. 4. 5. 6. 7.]
'''

'''
5, NumPy创建区间数组
所谓区间数组,是指数组元素的取值位于某个范围内,并且数组元素之间可能会呈现某种规律,比如等比数列、递增、递减等。
为了方便科学计算,Python NumPy 支持创建区间数组。

1) numpy.arange()
在 NumPy 中,您可以使用 arange() 来创建给定数值范围的数组,语法格式如下:
numpy.arange(start, stop, step, dtype)

参数说明
参数名称    说明描述
start    起始值,默认是 0。
stop    终止值,注意生成的数组元素值不包含终止值。
step    步长,默认为 1。
dtype    可选参数,指定 ndarray 数组的数据类型。

根据start与stop指定的范围以及step步长值,生成一个 ndarray 数组,示例如下。
'''
print("-----------numpy.arange()-------------")
arr10 = np.arange(10)
print('arr10 :', arr10)
# 设置 start 、stop 值以及步长,最终输出 0-10 中的奇数:
arr11 = np.arange(1,10,2)
print('arr11 :', arr11)
'''
arr10 : [0 1 2 3 4 5 6 7 8 9]
arr11 : [1 3 5 7 9]
'''

'''
2) numpy.linspace()
表示在指定的数值区间内,返回均匀间隔的一维【等差数组】,默认均分 50 份,语法格式如下:
np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

参数说明
参数名称    说明描述
start:代表数值区间的起始值;
stop:代表数值区间的终止值;
num:表示数值区间内要生成多少个均匀的样本。默认值为 50;
endpoint:默认为 True,表示数列包含 stop 终止值,反之不包含;
retstep:默认为 False,表示生成的数组中会不显示公差项,反之显示;
dtype:代表数组元素值的数据类型。
'''
print("-----------numpy.linspace()-------------")
# 1-10之间,生成4个样本
arr12 = np.linspace(1, 10, 4)
print('arr12 :', arr12)
# endpoint 为 Fasle 时,此时不包含终止值:
arr13 = np.linspace(1, 10, 4, endpoint=False)
print('arr13 :', arr13)
# retstep 为 True 时,显示公差项:
arr14 = np.linspace(1, 10, 4, retstep=True)
print('arr14 :', arr14)
'''
arr12 : [ 1.  4.  7. 10.]
arr13 : [1.   3.25 5.5  7.75]
arr14 : (array([ 1.,  4.,  7., 10.]), 3.0)
'''

'''
3) numpy.logspace()
该函数同样返回一个 ndarray 数组,它用于创建【等比数组】,语法格式如下:
np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)

参数说明
参数名称    说明描述
start    序列的起始值:base**start。
stop    序列的终止值:base**stop。
num    数值范围区间内样本数量,默认为 50。
endpoint    默认为 True 包含终止值,反之不包含。
base    对数函数的 log 底数,默认为10。
dtype    可选参数,指定 ndarray 数组的数据类型。
'''
print("-----------numpy.logspace()-------------")
# 10的1次方和2次方即 10-100之间,生成5个样本
arr15 = np.logspace(1, 2, num=5)
print('arr15 :', arr15)
# base = 2 的对数函数
arr16 = np.logspace(1, 9, num=9, base=2)
print('arr16 :', arr16)
'''
arr15 : [ 10.          17.7827941   31.6227766   56.23413252 100.        ]
arr16 : [  2.   4.   8.  16.  32.  64. 128. 256. 512.]
'''

'''
6, Numpy索引和切片
在 NumPy 中,如果想要访问,或修改数组中的元素,您可以采用索引或切片的方式,
比如使用从 0 开始的索引依次访问数组中的元素,这与 Python 的 list 列表是相同的。

NumPy 提供了多种类型的索引方式,常用方式有两种:基本切片与高级索引。这里重点讲解基本切片。

1) 基本切片
NumPy 内置函数 slice() 可以用来构造切片对象,
slice(start, stop, step)
该函数需要传递三个参数值分别是 start(起始索引)、stop(终止索引) 和 step(步长) ,
通过它可以实现从原数组的上切割出一个新数组。
'''
print("-----------基本切片,slice()-------------")
arr17 = np.arange(10)
print('arr17 :', arr17)
#生成切片对象,生成一个(从索引2开始,到索引8停止,间隔步长为2)的切片对象
slc = slice(2,8,2)
arr18 = arr17[slc]
print('arr18 = arr17[slice(2,8,2)]切片对象切片 :',arr18)
#也可以通过冒号来分割切片参数,最终也能获得相同结果
arr19 = arr17[2:8:2]
print('arr19 = arr17[2:8:2]冒号来分割切片 :',arr19)
'''
arr17 : [0 1 2 3 4 5 6 7 8 9]
arr18 = arr17[slice(2,8,2)]切片对象切片 : [2 4 6]
arr19 = arr17[2:8:2]冒号来分割切片 : [2 4 6]

对冒号切片做简单地说明:
如果仅输入一个参数,则将返回与索引相对应的元素。 对于上述示例来说[3] 就会返回 3。
如果在其前面插入“:”如[:8],则会返回 0-7 的所有数字(不包含8)。
如是 [3:] 则会返回 3-9 之间的数字。
如果在两个参数之间,如[4:8],则对两个索引值之间的所有元素进行切片(不包括停止索引)。
如果在三个参数之间,如[2:8:2],则对两个索引值之间的所有元素(不包括停止索引)2-7,步长为2,进行切片。
'''

'''
2) 多维数组切片
'''
print("-----------基本切片,多维数组切片-------------")
arr20 = np.array([[1, 2, 3], [6, 4, 3], [7, 8, 9]])
print('arr20 :', arr20)
# 从[1:]索引处开始切割
arr21 = arr20[1:]
print('arr21 :', arr21)
'''
arr20 : [[1 2 3]
 [6 4 3]
 [7 8 9]]
arr21 : [[6 4 3]
 [7 8 9]]
'''
'''
注意:切片还可以使用省略号“…”,如果在行位置使用省略号,那么返回值将包含所有行元素,反之,则包含所有列元素。
'''
arr22 = arr20[...,1]
#返回数组的第二列
print('arr22,返回数组的第二列 :', arr22)
#返回数组的第二行
arr23 = arr20[1,...]
print('arr23,返回数组的第二行 :', arr23)
#返回第二列后的所有项
arr24 = arr20[...,1:]
print('arr24,返回第二列后的所有项 :', arr24)
'''
arr22,返回数组的第二列 : [2 4 8]
arr23,返回数组的第二行 : [6 4 3]
arr24,返回第二列后的所有项 : [[2 3]
 [4 3]
 [8 9]]
'''

 



posted @ 2023-05-24 19:46  PandaCode辉  阅读(14)  评论(0编辑  收藏  举报