python数据加工1

随机数

如何一次生成一个随机数?用random模块

设置种子数:random.seed()

#随机生成一个整数
import random
random.seed(3)
for i in [1,2,3,4,5]:    
    random.seed(3)
    print(random.randint(1,100))
    print(random.randint(1,100))
31
76
31
76
31
76
31
76
31
76
#随机生成一个实数
random.uniform(-10,10)
#保留小数点后三位有效
round(random.uniform(-10,10),3)

如何一次生成一个“随机数组”?

用Numpy生成一个随机数组的基本步骤:

  • 第一步,通过np.random.RandomState 定义一个随即变量的生成器rand
  • 第二步,根据目标数组的特征(如服从均匀分布或是正态分布),选择生成器rand具体方法,如rand.randint(),rand.rand(),rand.randn()

(1)生成整数。例:生成一个3*6的矩阵,矩阵的每个元素的取值范围为[0,10]之间的整数

import numpy as np
rand=np.random.RandomState(32)#参数32为随机数种子数
x = rand.randint(0,10,(3,6)) #(3,6)为目标数组的形状
print(x)
[[7 5 6 8 3 7]
 [9 3 5 9 4 1]
 [3 1 2 3 8 2]]

(2)生成服从均匀分布的浮点数(实数)数组,如生成一个含有5个元素的数组

#rand.rand()返回值的取值为[0,1],“*10”的慕斯是“调整所有生成随机数的取值范围”
x = rand.rand(5)*10
print(x)
[6.76485756 6.30236437 3.56365709 0.6665021  8.90436786]

(3)生成服从正态分布的浮点数(实数)数组,如生成一个含所有5个元素且服从正太分布的数组

y = rand.randn(5)+5
y

array([4.95533055, 5.03929423, 2.50675939, 3.20330251, 4.72473022])

(4)生成等距数列,如产生一个含有20个元素的等距数列,其中每个元素的取值范围为[0,10]

x = np.linspace(0,10,20)
x
array([ 0.        ,  0.52631579,  1.05263158,  1.57894737,  2.10526316,
        2.63157895,  3.15789474,  3.68421053,  4.21052632,  4.73684211,
        5.26315789,  5.78947368,  6.31578947,  6.84210526,  7.36842105,
        7.89473684,  8.42105263,  8.94736842,  9.47368421, 10.        ])

数组

ndarry是python常用扩展包numpy的灵魂,代表一种特殊的数据结构——n维数组。虽然python基础功能中没有提供数组,但可以通过列表和元组实现类似数组的功能

创建数组

第一类方法:用np.arange()

myArray1 = np.arange(1,10)
myArray1

第二类方法:用np.array()

myArray2 = np.array([1,2,3,4,5])
myArray2

第三类方法:用np.zeros()、np.ones()等函数

myArray3 = np.zeros((5,5))
myArray3
myArray4 = np.ones((5,5))
myArray4

第四类方法:用np.full()创建相同元素的数组、

np.full((3,5),2)

第五类方法:用np.random生成随机数组

rand = np.random.RandomState(1)
myArrag5 = rand.randint(0,100,[3,5])
myArrag5 

切片/读取

切片操作中,规则为“左包含右不包含”

python中变量名之后的[]和[[]]的区别:

一个方括号:                                     切片操作-------------------有规则切片:myList[1:9:3]

嵌套的两个方括号[[]]:                         Fancy Indexing ----------不规则切片:myList[[1,2,4]]

浅拷贝和深拷贝

浅拷贝:复制过来的是“引用”,即“复制对象和被复制对象共享一个存储空间,二者并不是相互独立的”

import numpy as np
myArray1 = np.array(range(0,10))
myArray2 = myArray1
myArray2[1] = 100#此处修改了myArray2的取值
myArray1
array([  0, 100,   2,   3,   4,   5,   6,   7,   8,   9])

深拷贝:复制过来的是“值”,即“复制对象和被复制对象占用两个不同空间,二者是相互独立的”

深拷贝的方法:copy()

import numpy as np
myArray1 = np.array(range(0,10))
myArray2 = myArray1.copy()
myArray2[1] = 100#此处修改了myArray2的取值
myArray1
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

形状与重构

重构的含义为“返回一个符合新形状要求的数组”

(1)用方法reshape(),返回一个新的数组

输入: 

MyArray6 = MyArray5.reshape(5,4)
MyArray6

输出 

array([[ 1,  2,  3,  4],
       [ 5,  6,  7,  8],
       [ 9, 10, 11, 12],
       [13, 14, 15, 16],
       [17, 18, 19, 20]])

输入 

MyArray5.shape

输出 

(20,)

输入 

MyArray5

输出 


MyArray5
array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20])

(2)用resize()方法更改数组本身的形状,即“就地修改”

MyArray5.resize(4,5)
MyArray5
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])

(3)用swapaxes()方法进行轴交换,如时间矩阵转置

MyArray5.swapaxes(0,1)
array([[ 1,  6, 11, 16],
       [ 2,  7, 12, 17],
       [ 3,  8, 13, 18],
       [ 4,  9, 14, 19],
       [ 5, 10, 15, 20]])

 

MyArray5
array([[ 1,  2,  3,  4,  5],
       [ 6,  7,  8,  9, 10],
       [11, 12, 13, 14, 15],
       [16, 17, 18, 19, 20]])

 

(4)用flatten()方法将多维数组转成一维数组

MyArray5.flatten()

 

array([ 1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15, 16, 17,
       18, 19, 20])

(5)用tolist()方法将多维数组转换为嵌套列表

MyArray5.tolist()
[[1, 2, 3, 4, 5], [6, 7, 8, 9, 10], [11, 12, 13, 14, 15], [16, 17, 18, 19, 20]]

(6)可以重设数组元素的数据类型

MyArray5.astype(np.float)
array([[ 1.,  2.,  3.,  4.,  5.],
       [ 6.,  7.,  8.,  9., 10.],
       [11., 12., 13., 14., 15.],
       [16., 17., 18., 19., 20.]])

ndarray的计算

  • 横向拆分--------------split()方法

输入

x = np.array([11,12,13,14,15,16,17,18])
x1,x2,x3 = np.split(x,[2,4])
print(x1,x2,x3)

输出

[11 12] [13 14] [15 16 17 18]

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值