3、Numpy基本操作

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]]

'''

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值