1、Numpy创建对象方式
'''
(1) NumPy 是科学计算基础库,提供大量科学计算相关功能。比如数据统计,随机生成。
最核心的类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,
Numpy支持对ndarray对象的向量处理(将此对象,作为一个进行向量处理),提高程序运行速度。
'''
import numpy as np
# a = np.arange(10)
# print(a)
# print(type(a))
# # [0 1 2 3 4 5 6 7 8 9]
# # <class 'numpy.ndarray'>
#
# # (2)对列表中的元素进行开平法--》再将结果进行存储
# import math
# b = [3,4,9]
#
# # 定义存储开平方--》结果的列表
# result = []
# for i in b:
# # print(math.sqrt(i))
# result.append(math.sqrt(i))
#
# print(result)
# # [1.7320508075688772, 2.0, 3.0]
#
#
# # (3)上面这样遍历后开平方是非常慢的---》np.arange直接有开平方的方法
# # 对ndarray对象进行向量处理(作为一个整体,直接传入方法)
# print(np.sqrt(a))
'''
[0. 1. 1.41421356 1.73205081 2. 2.23606798
2.44948974 2.64575131 2.82842712 3. ]
'''
'''
(2) 数组的创建
array:创建
numpy模块的array函数可以生成多维数组。如,如果要生成一个二维数组,需要向array函数传递一个列表类型的参数。
每一个列表元素是一维的ndarray类型数组,作为二维数组的行。另外通过ndarray类的shape属性可以获得数组每一维
的元素个数(元组形式),也可以通过shape[n]形式获得每一维的元素个数,其中n是维度,从0开始
numpy.array(object,dtype=None,copy=True,order=None,subok=False,ndmin=0)
列表,元素类型,ndmin=0 指定维度
'''
# (3)使用array函数创建一维数组。(传入一维列表)
# a = np.array([1,2,3,4])
# print(a)
# print(type(a))
#
# # (4)使用array函数创建二维数组。 (传入二维列表)
# b = np.array([[1,2,3],[4,5,6],[7,8,9]])
# print(b)
# print(type(b))
#
# # (5)使用array函数创建三维数组。(传入三维列表)
# c = np.array([[[1,2,3],[4,5,6],[7,8,9]]])
# print(c)
# print(type(c))
#
# # (6)array函数中ndim的使用
# e = np.array([1,2,3],dtype=float,ndmin=3)
# print(e)
'''
[1 2 3 4]
<class 'numpy.ndarray'>
[[1 2 3]
[4 5 6]
[7 8 9]]
<class 'numpy.ndarray'>
[[[1 2 3]
[4 5 6]
[7 8 9]]]
<class 'numpy.ndarray'>
[[[1. 2. 3.]]]
'''
'''
(7) arange创建---》使用这个函数创建数值范围并返回ndarray对象
numpy.arange(start,stop,step,dtype)
start:默认0,stop:不包含,step:步长默认1
'''
# (8)range(start,end,step) [start,end)
a = list(range(1,10))
print(a)
b = list(range(10))
print(b)
'''
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
'''
# (9) 使用arange()创建1-10的数组
c = np.arange(1,11)
print(c)
# [ 1 2 3 4 5 6 7 8 9 10]
# (1)随机数创建 numpy.random.random(size=None)
# 该方法返回[0.0,1.0)范围的随机数
import numpy as np
# (2)使用random创建一维数组,元素个数size=5
# a = np.random.random(size=5)
# print(a)
#
# # (3)使用random创建二维数组,元素个数size=3*4
# # 如果是三维(2,3,4):可以看成是2个3*4的矩阵
# b = np.random.random(size=(3,4))
# print(b)
#
# # (4)生成0-5之间的随机整数,一维
# def randomintTest():
# c = np.random.randint(6,size=10)
# print(c)
# print(type(c))
# print(c.dtype)
#
#
# randomintTest()
'''
[0.43276063 0.34695956 0.73924462 0.47841383 0.56560578]
[[0.057483 0.67229332 0.35723102 0.2055481 ]
[0.36016794 0.01299025 0.73131953 0.91632902]
[0.60890814 0.64552068 0.32682584 0.67181371]]
[0 5 0 0 1 5 2 2 2 3]
<class 'numpy.ndarray'>
int32
'''
# (5)创建正态分布
# numpy.random.randn(d0,d1,....dn)
# randn函数返回一个或一组样本,具有标准正态分布(期望0,方差1)
# dn表示维度, 返回值为指定维度的array
def randnTest():
a = np.random.randn(4,3)
print(a)
randnTest()
'''
[[ 0.0537271 -0.72478371 0.26956906]
[ 0.64281553 -0.68555104 1.97106685]
[ 0.21705904 -0.58948388 0.82526997]
[ 0.61928733 -0.2810109 -0.79856954]]
'''
# (6)创建指定期望和方差的正太分布
# np.random.normal(loc:期望, scale:方差, size())
def normalTest():
b = np.random.normal(loc=2,scale=3,size=(2,3))
print(b)
normalTest()
'''
[[5.9355748 1.90750172 7.05947467]
[5.96757004 4.75165374 5.4183744 ]]
'''
import numpy as np
'''
(1) ndarray对象---》NumPy最重要的一个特点是其N维数组对象ndarray,它是一系列同类型数据的集合
以0下标开始进行集合中元素的索引
1.1) ndarray对象是用于存放同类型元素的多维数组
1.2) ndarray中每个元素在内存中都有相同存储大小区域
1.3) 其内部由以下内容组成
一个指向数据(内存/内存映射文件中的一块数据)的指针。 数据类型或者dtype,描述在数组中的固定大小值的格子。
一个表示数组形状(shape)的元组,表示各维度大小的元组。
1.5)ndarray 对象中比较重要的属性
ndarray.ndim: 秩,轴的数量或者维度的数量
ndarray.shape: 数组的维度
ndarray.size: 数组中元素总个数 m*n
ndarray.itemsize: 对象中每个元素的大小
'''
'''
(2) ndarray数组除了可以使用底层ndarray构造器来创建外,还可以通过函数来创建
'''
# (2.1)zeros创建指定大小的数组,数组元素以0来填充
# numpy.zeros(shape,dtype=float,order='C')
# def zerosTest():
# a = np.zeros(5)
# print(a)
#
# b = np.zeros((5,),dtype=int)
# print(b)
#
# zerosTest()
'''
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0. 0. 0. 0. 0.]
[0 0 0 0 0]
'''
# x = np.zeros((2,2),dtype=int)
# print(x)
#
# y = np.ones((3,3),dtype=int)
# print(y)
#
# z = np.empty((2,2))
# print(z)
'''
[[0 0]
[0 0]]
[[1 1 1]
[1 1 1]
[1 1 1]]
[[3.65100273e+233 1.34787127e+243]
[3.11733196e+150 2.57344645e+151]]
'''
# (3)等差数列
x = np.linspace(0,10,5,retstep=True)
print(x)
# (4)等比数列
y = np.logspace(0,9,10,base=2)
print(y)
'''
(array([ 0. , 2.5, 5. , 7.5, 10. ]), 2.5)
[ 1. 2. 4. 8. 16. 32. 64. 128. 256. 512.]
'''
2、Numpy切片和索引
# (1)ndarray对象内容的切片与索引
import numpy as np
# a = np.arange(10)
# b = a[2:7:2] # (start,end,step)
# c = a[2:]
# print(a)
# print(b)
# print(c)
# [0 1 2 3 4 5 6 7 8 9]
# [2 4 6]
# [2 3 4 5 6 7 8 9]
# (2)二维数组的切片使用
# x = np.arange(1,13)
# y = x.reshape(4,3)
# print(y)
#
# # (2.1)找到所有行的第二列
# print("所有行的第二列")
# print( y[:,1])
#
# # (2.2)找到奇数行的第一列
# print("奇数行的第一列")
# print( y[::2,0])
#
# '''
# [[ 1 2 3]
# [ 4 5 6]
# [ 7 8 9]
# [10 11 12]]
#
# 所有行的第二列
# [ 2 5 8 11]
#
# 奇数行的第一列
# [1 7]
# '''
#
# # (2.3)使用坐标获取数组元素[x,y]。 **同时获取多个元素
# print("获取第3行第2列")
# print(y[2,1])
#
# print("同时获取第3行第2列,第4行第1列")
# print(np.array((y[2,1],y[3,0])))
# print(y[[2,3],[1,0]])
#
#
# # (2.4)索引为负数
#
# # 把数组y进行行倒序排序
# print("把数组y进行行倒序排序")
# print(y[::-1])
#
# # 把数组y进行行、列倒序排序
# print("把数组y进行行、列倒序排序")
# print(y[::-1,::-1])
'''
把数组y进行行倒序排序
[[10 11 12]
[ 7 8 9]
[ 4 5 6]
[ 1 2 3]]
把数组y进行行、列倒序排序
[[12 11 10]
[ 9 8 7]
[ 6 5 4]
[ 3 2 1]]
'''
# (2.5) 通过切片出来的 数组,即使把他赋值给了新变量,它任然有原来数组的视图
# 修改新数组的值,会影响原来数组值
a = np.arange(1,13).reshape(4,3)
sub_array = a[:2,:2]
sub_array[0][0] = 100
print(a)
print(sub_array)
'''
[[100 2 3]
[ 4 5 6]
[ 7 8 9]
[ 10 11 12]]
[[100 2]
[ 4 5]]
'''
# (2.6)如果想不变动原来数组数据值---》用numpy中的copy方法
sub_aa = np.copy(a[:2,:2])
sub_aa[0][0] = 200
print(a)
print(sub_array)
print(sub_aa)
'''
[[100 2 3]
[ 4 5 6]
[ 7 8 9]
[ 10 11 12]]
[[100 2]
[ 4 5]]
[[200 2]
[ 4 5]]
3、改变数组维度
# (1)数组维度的改变
import numpy as np
# (1.1)将1维数组---》转换维2维数组/ 3维数组
# a = np.arange(1,13)
# print(a)
#
# b = a.reshape(4,3)
# print(b)
#
# c = a.reshape(2,2,3)
# print(c)
'''
[ 1 2 3 4 5 6 7 8 9 10 11 12]
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
'''
# (1.2)通过np.reshape()改变数组维度
# a = np.arange(1,13)
# b = np.reshape(a,(3,4))
# print(b)
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]]
'''
# (1.3)将多维数组修改为1维数组
# a = np.arange(1,25)
# b = np.reshape(a,(4,3,2)) # 4个3行2列数组
# print(b)
#
# '''
# [[[ 1 2]
# [ 3 4]
# [ 5 6]]
#
# [[ 7 8]
# [ 9 10]
# [11 12]]
#
# [[13 14]
# [15 16]
# [17 18]]
#
# [[19 20]
# [21 22]
# [23 24]]]
# '''
#
# c = b.reshape(24)
# d = b.reshape(-1)
# e = b.flatten()
# f = b.ravel()
# print(c,d,e,f)
# (2)实现数组拼接
# a1 = np.arange(8).reshape(2,4)
# a2 = np.arange(8).reshape(2,4)
#
# b1 = np.concatenate((a1,a2),axis=0)
# b2 = np.concatenate((a1,a2),axis=1)
# print("拼接后的数组为:")
# print(b1)
# print(b2)
'''
拼接后的数组为:
[[0 1 2 3]
[4 5 6 7]
[0 1 2 3]
[4 5 6 7]]
[[0 1 2 3 0 1 2 3]
[4 5 6 7 4 5 6 7]]
'''
# (3)数组分割
# x = np.arange(1,9)
# a = np.split(x,4) # 分成4等分
# print( a )
#
# b = np.split(x,[3,5]) # 按数组位置分
# print(b)
'''
[array([1, 2]), array([3, 4]), array([5, 6]), array([7, 8])]
[array([1, 2, 3]), array([4, 5]), array([6, 7, 8])]
'''
# (3.2)二维数组进行分割
a = np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]])
print(a)
print('axis=0 垂直方向 平均分割')
r = np.split(a,2,axis=0)
print(r[0])
print(r[1])
'''
[[ 1 2 3 4]
[ 5 6 7 8]
[ 9 10 11 12]
[13 14 15 16]]
axis=0 垂直方向 平均分割
[[1 2 3 4]
[5 6 7 8]]
[[ 9 10 11 12]
[13 14 15 16]]
'''