数据分析,numpy学习

import numpy as np
#
# #初始化数组
# arr = np.array([1,2,3])
# print(type(arr))
#
# arr1 = np.array([[1,2,3],[2,3,4]])
# print(arr1.shape)#打印维度
# print(arr1[0,0]) #访问二维第一个元素
#
# #构建全是0的2*3维度的数组
# a = np.zeros((2,3))
# print(a)
#
# #构建全是1的2*3维度的数组
# b = np.ones((2,3))
# print(b)
#
# #构建全是8的2*2*2维度的数组
# c = np.full((2,2,2),8)
# print(c)
#
# #对角线全是1的4*4维度数组
# d = np.eye(4)
# print(d)
#
# #数值随机的2*2*5维度数组
# e = np.random.random((2,2,5))
# print(e)
#
# #数值未被初始化的3*3*4维度的数
# f = np.empty((3,3,4))
# print(f)
# print(f.shape)
#
# #生成0-14的数组
# g =np.arange(15)
# print(g)
# print(g.shape)
#
# #指定数组数据类型
# h = np.array([1.7,2.7,3.7],dtype = np.float)
# print(h)
# print(h.dtype)
# #转换已有数组数据类型,如果原来是小数,转换为int时小数部分会被舍弃,无法转时会抛出异常
# int_h = h.astype(np.int64)
# print(int_h,int_h.dtype)
# #可以使用其他数组的数据类型作为参数
# j = np.array(['1','2','3'])
# j.astype(dtype=int_h.dtype)
# print(j)
#
# #切片方法与list相似,切片是引用,改变切片后的内容原数组也会改变
# k = np.array([[1,2,3],[4,5,6],[7,8,9]])
# l=k[:2,1:]
# # print(l)
# # l[0,0] = 11
# # print(l,k)
# #在第二维度切片,列
# i = k[:,0]
# print(i)
# #使用下标取不同位置的值
# # u = k[[0,0,1,2],[1,0,0,1]] #前面是数组下标,后面数数组内部下标
# # print(u)
# #由于内部是数组,可以构建数组去访问赋值
# k1 = np.array([1,0,0])
# k2 = k[np.arange(3),k1]
# print(k2)
#
# #使用条件判断
# k3 = (k>2)
# print(k3)
# print(k[k3])
# print(k[k>2])

#数学运算
x = np.array([[1,2],[3,4]],dtype=np.float64)
y = np.array([[5,6],[7,8]],dtype=np.float64)
#逐个求和
print(x+y)
print(np.add(x,y))
#逐个相减
print(x-y)
print(np.subtract(x,y))
#逐个相乘
print(x*y)
print(np.multiply(x,y))
#逐个相除
print(x/y)
#逐个求整除
print(x//y)
# 逐个取余
print(x%y)

# 求向量内积
print(np.dot(x,y))  #行向量*列向量
#矩阵转置  (矩阵行列互换)
x1 = np.array([[1,2,3],[4,5,6]])
print(x1.T)
#生成矩阵,使用数字填充
arr1 = np.arange(16).reshape(2,2,4)
print(arr1)
print(arr1.transpose((2,1,0))) #转置

# print(arr1.swapaxes(1,2)) #表示将1,2维度进行转换


#矩阵内部元素求和
print(np.sum(arr1))
print(arr1.sum())

#对某一维度求和
arr2 = np.array([[0,1,2],[4,5,6]])
print(np.sum(arr2,axis=1))

#对某一维度求和取平均值
print(np.mean(arr2,axis=0))
print(np.mean(arr2,axis=1))

#维度内部求和(累加的)
print(np.cumsum(arr2,axis=0))
print(np.cumsum(arr2,axis=1))

#维度内部求乘积(累加的)
print(np.cumprod(arr2,axis=0))
print(np.cumprod(arr2,axis=1))

#二维数组排序 在某一维度排序
arr3 = np.random.randn(5,3)*10
print(arr3)
arr3.sort(1)
print(arr3)

#broadcasting :当两个数组某个维度相等,可以进行加减乘除操作
x = np.array([[1,2,3],[4,5,6],[7,8,9]])
y = np.array([1,0,1])
print(x.shape)
print(y.shape)
print(x+y)

#逻辑运算
x = np.array([0,1,2,3,4,5])
y = np.array([6,7,8,9,10,11])
cond = ([True,False,True,False,False,True])
print(np.where(cond,x,y)) #当是True从第一个元素内找,当是Flase时从第二个元素找

x = np.random.randn(4,4)
print(x>0)
print(np.where(x>0,[1],[-1]))


# #使用reshape改变数组维度
# x = np.arange(8)
# print(x)
# x = x.reshape(4,2)
# print(x)
# #reshape参数可以使用其他数组的维度参数
# y = np.ones((2,4))
# print(y)
# x = x.reshape(y.shape)
# print(x)
# #改成一维的数组
# x = x.ravel()
# print(x)

#连接两个二维数组
arr1 = np.array([[1,2,3],[4,5,6]])
arr2 = np.array([[7,8,9],[10,11,12]])
print(np.concatenate([arr1,arr2],axis=0))
print(np.vstack((arr1,arr2)))

print(np.concatenate([arr1,arr2],axis=1))
print(np.hstack((arr1,arr2)))

#将数组截开
arr1 = np.random.randn(5,5)
# print(arr1)
#[1,3]代表的是a2,其他前面给a1,后面给a3
a1,a2,a3 = np.split(arr1,[1,3],axis=0)
print(a1,'\n\n',a2,'\n\n',a3)
a1,a2,a3 = np.split(arr1,[1,3],axis=1)
print(a1,'\n\n',a2,'\n\n',a3)

#堆叠辅助
arr1 =np.arange(6)
arr2 = arr1.reshape((3,2))
arr3 = np.random.randn(3,2)
print(np.r_[arr2,arr3])   #按行堆叠
print(np.c_[np.r_[arr2,arr3],arr1])  #按列堆叠

#切片直接转数组
print(np.c_[1:3,7:9])

#repeat重复
arr = np.arange(3)
print(arr.repeat(3)) #全重复3次
print(arr.repeat([2,3,5])) #第一个元素重复2次,第二个元素重复3#指定维度重复
arr = np.random.randn(2,3)
print(arr)
print(arr.repeat(2,axis=0))
print(arr.repeat(2,axis=1))

#整块重复tile
print(np.tile(arr,2))
print(np.tile(arr,(2,3)))


#numpy文件输入输出
#数组写入
arr = np.arange(50).reshape(2,5,5)
# print(arr)
#np.save('first_arr',arr)

#多个数组写入
arr1 = np.arange(30).reshape(3,5,2)
# np.savez('second_arr.npz',a=arr,b=arr1)

#数组读取
arr2 = np.load('first_arr.npy')
# print(arr2)
#多个数组读取
arch = np.load('second_arr.npz')
print(arch['b'])

#softmax 求概率分布
m = np.random.rand(10,10)*10 + 1000
print(m)
# print(np.exp(m))#指数爆炸,数值太大
#分子分母同时除以一个数,数值不变
m_row_max = m.max(axis=0)
m_new = np.exp(m-m_row_max.reshape(10,1))
m_row_sum = np.sum(m_new,axis=1).reshape(10,1)
m_last = m_new/m_row_sum
print(m_last)
print(np.sum(m_last,axis=1))


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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值