Numpy学习---代码

NUMPY学习

import numpy as np
import matplotlib.pyplot as plt
def numpy_sum(n):

    a = np.arange(n) ** 2
    b = np.arange(n) ** 3
    return a+b
#print(numpy_sum(10))

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

#print(x)
#arange(开始,结束,步长)
x.shape,x.ndim,x.size,x.dtype

###创建array快捷函数

a = np.ones(2)#一维
b = np.ones((2,3))#多维
d = np.zeros(1)
e = np.empty(1)#全是0,但是运行时全是随机数
c = np.ones_like(a)#创建形状相同的
a = np.full((2,4),66)
#创建一个(2,4),里面的值全是66

#随机产生一个3*2的矩阵
a = np.random.randn(3,2)
#这样产生一个数组,还可将其形状改变
b = np.arange(10).reshape(2,5)

a+1
a*3
a = np.sin(a)


#从第三个到最后一个,不包括最后一个
a[2:-1]

####Numpy经常要处理大数组,避免每次都复制
x = np.arange(10)
x[1:4] = 666
#print(x)

###神奇索引
#print(x[[3,4,7]])
x = x.reshape(2,5)


####应用  获取数组中最大的前N个数字
arr = np.random.randint(1,100,10)
#print(arr)
#随机产生10个随机数 从1-100
index= arr.argsort()[-3:]
#argsort会返回排序之后的索引index,取最大值对应的3个下标
#print(arr[arr.argsort()[-3:]])


###  二维数组
x = np.arange(20).reshape(4,5)
#筛选行,列可以省略
x[[0,2]]
#筛选列,行不可以省略
x[:,[2,3]]

### 布尔索引
x = np.arange(10)
x>5
#前面返回 false,后面返回true
x[x<5]+=20
#前五个加20
#在二位数组上的表现
x = np.arange(20).reshape(4,5)
x[x>5]
#由于 x>5是bool数组,因此返回的是一维结果
x[:,3]>5
#将第三列大于5的
x[x[:,3]>5]
x[2]#取出第二行
#如果第三列有数字》5就将此行取出,这里是按行取出来


###a[size,replace,p]
a = np.random.choice(5,3)
a = np.random.choice(5,(2,3))
#随机在 【】中生成3个数字
a = np.random.choice([2,3,6,7,9],3)
a = np.random.choice([2,3,6,7,9],(2,3))
#随机生成一个矩阵

###把一个数组x进行随机排列
a = np.arange(10)
np.random.shuffle(a)
#print(a)
#如果数组是多维的,则只会在第一个维度打散数据
#只会按行打散

###把一个数组x进行随机排列,或者数字的全排列

a = np.random.permutation(10)
arr = np.arange(9).reshape((3,3))
#print(arr)
#这里不会更改原来的arr,会返回一个新的copy
arr1 = np.random.permutation(arr)
#按第一维打乱
#print(arr1)

#正态分布 平均值 方差 size(3,4)
np.random.normal(1,10,10)
#
###例子:对数组加随机噪声

###绘制sin曲线
#最小-10 最大10 生成100 个点
x = np.linspace(-10,10,100)
y = np.sin(x)
#x与y都一一对应
#plt.plot(x,y)
#plt.show()

###加入噪声
x = np.linspace(-10,10,100)
#np.random.rand(len(x))均匀分布 len(x)生成维度与x是一样的
y = np.sin(x)+np.random.rand(len(x))
#plt.plot(x,y)
#plt.show()


###
arr = np.arange(12).reshape(3,4)
arr1 = arr.sum(axis = 0)
##axis = 0将行消解掉,axis =1 将列消解掉
#print(arr)



####实例 机器学习将数据进行标准化
#arr
#计算每一列的均值
mean  = np.mean(arr,axis=0)
#不同列代表不同特征,所以逐列进行计算
#计算每一列的方差
std =np.std(arr,axis =  0)
#计算分子,注意每行都会分别减去【4,5,6,7】,这叫做广播
fenzi = arr - mean
#print(fenzi)

result = fenzi/std

###用标准式子
result = (arr - np.mean(arr,axis=0)) /np.std(arr,axis = 0)
#(x - 均值)/方差  标准化

###numpy计算数组中满足条件元素的个数
###需求 一个1亿的数字,求出数字中<5000的数字数目

#生成这个1亿数字
arr = np.random.randint(1,10000,size = int(1e8))
#print(arr.size)
#使用python原生语法实现
pyarr = list(arr)
#len返回对象的长度
len([x for x in pyarr if x>5000])
#记录时间

###使用numpy的向量化进行操作
arr[arr>5000].size
#传入条件,这是numpy支持的布尔索引
(arr>5000)[:10]


ar = np.arange(10)

#方法一,给以为向量添加一个行维度
ar[np.newaxis,:]
#这个ar形状为 1,5

#方法二,添加一个行维度
np.expand_dims(ar,axis = 0)
#方法三
np.reshape(ar,(1,5))


#按行或者按列合并
a = np.arange(3).reshape(2,3)
b = np.random.randint(10,20,size = (4,3))

#1
np.concatenate([a,b])
np.concatenate([a,b],axis = 1)
#2
np.vstack([a,b])
np.hstack([a,b])
#3
np.row_stack([a,b])
np.column_stack([a,b])


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值