numpy使用技巧

numpy使用技巧

导入numpy模块

import numpy as np
data1 = [1, 2, 3, 4, 5, 6]
print(type(data1))
arr1 = np.array(data1)
arr1
print(type(arr1))

生成一个矩阵

i = np.array([[1, 2, 3],
              [4, 5, 6],
              [7, 8, 9]])
print(i)

将列表转化为矩阵

data2 = [[1, 2, 3, 4], [5, 6, 7, 8]]
arr2 = np.array(data2)
arr2
print(arr2)

关于矩阵的查询函数(ndim, shape, dtype)

print('arr2 的维数', arr2.ndim)
print('arr2的形状', arr2.shape)
print('arr2 的类型', arr2.dtype )

对矩阵的类型进行转化, int32 转 float64 或者相反

float_arr = arr2.astype(np.float64)
print(float_arr.dtype)
float_arr

建立零矩阵,默认是行为一的零矩阵,zeros((m, n))建立一个m * n的矩阵

a = np.zeros(23)
print(a)
b = np.zeros((2, 3))
print(b)
b = a.astype(np.int32)
b

c = np.arange(10)
type(c)
c.dtype

data = np.arange(6).reshape((2, 3))
#reshape的参数必须与相应的矩阵匹配
data

np.zeros((3, 2))
#用零填充出一个reshape参数的矩阵

data * 10
#将矩阵的每一个数都乘相应的系数 

data + data
#同形矩阵相应元素相加

索引与切片

arr = np.arange(10)
arr
arr[5: 8]
#切片包含前项但不包含后项,即左闭可开

arr[5 : 8] = 1
arr
#对相应切片赋值相当于对切片所有位置赋值

arr[5 : 8] = range(3)
arr
#可以用range函数对其进行进一步赋值。
#range是元组,可以用元组进行赋值

arr2d = np.arange(1, 10).reshape((3, 3))
arr2d
#建立二维数组
arr2d[:2]
#取前两行数组
arr2d[:2, 1:]
#取前两行,除第一列的数组
arr2d[: , 1:2]
#无论是取行还是取列都不要忘记加 : 

j = [[1, 2, 3],
     [4, 5, 6],
     [7, 8, 9]]
j[ : 2]
k = np.arange(1, 10).reshape((3, 3))
k[ : 2]
#列表中无法使用切片方法,来处理列,如j[: , 1 : 3],这样是会报错的

rand_data = np.random.randn(5, 4)
rand_data[ : , 1 : 3]
#如何生成标准正态分布数

rand_data [rand_data < 0] = 0
rand_data
rand_data.dtype
rand_data = rand_data.astype(np.int32)
rand_data.dtype
rand_data
rand_data = np.random.randn(5, 4).astype(np.int32)
rand_data
#生成随机数的数值格式是float64的格式,可以使用astype转化成int32(整形)

arr = np.arange(15).reshape((3, 5))
arr
arr.T
#arr.T 代表arr的转置,也可以用transport来表示 。
#np.transpose(arr)

np.dot(arr, arr.T)
#np.dot 表示函数的内积

arr2 = np.array([-1, 2, 3, -3, 5, 9, -4, 9])
arr2
arr2.sum()
#表示对矩阵中的所有元素求和

print(np.mean(arr2))
print(np.max(arr2))
print(np.min(arr2))#负数符号参与比较


d = arr2 > 0 
#是一个判别式,返回True or False
d.sum()

numpy 常用操作

np.sqrt(256)  #开根号
np.square(8)  #平方
np.abs(-1)  #取绝对值
np.exp(1)  #e的多少次方
np.e ** 2
#np.e 是符点形,但是不能使用 (np.e) ^ 2会报借,为什么?
#在python里平方是用 ** 而不是 ^
np.exp(2)

np.pi
a = np.pi
np.log2(4)
#  求对数的标准格式,如果不加参数,则默认以e为底

print(np.sin(np.pi / 2))
#  可以用来对sin函数和cos函数 

print(np.sign( -3))
#  返回各元素的符号 值有 -1, 0, 1

print(np.isnan(np.nan))
#nan表示缺失值

排序

arr_sort = np.random.randn(8)
arr_sort
arr_sort2 = np.random.randn(8,2)
arr_sort2
#  sort 是从小到大
#  对于多行的矩阵使用sort() 得到的矩阵每一行都是由小到大的

arr_sort.sort()
arr_sort
arr_sort2.sort()
arr_sort2

线性代数

a = np.array([1, 2, 3])
b = np.array([1, 1, 0])
np.inner(a, b)
#  一维数组向量的内积
a = np.array([[1, 0], 
              [0, 1]])
a
b = np.array([[4, 1],
             [2, 2]])
np.dot(a, b)
#  矩阵相乘
A = np.linalg.det(a)
#  矩阵的行列式
B = np.linalg.inv(b)
#  矩阵的逆矩阵

numpy 练习题

第一题 :建一个0~9的整数数组,把一维数组中大于5的元素取反

a = np.arange(10)
print(a)
i = 0
for i in range(10):
    if a[i] > 5:
        a[i] = -a[i]
print(a)

a = 10
a *= -1
a
#  *= -1 是取相反数

第二题:创建5x5二维数组,边界元素为1,内部元素为0

a = np.arange(25).reshape(5 , 5)
a[ : , : ] = 0
#  可以直接利用np.zeros((5, 5))来构建 0 矩阵
print(a)
a[ 4 : 5, : ] = 1
a[ 0 : 1, : ] = 1
a[ : , 4 : 5] = 1
a[ : , 0 : 1] = 1
a

简单写法如下:

vector_2d = np.zeros((5, 5))
vector_2d[ : , [0, -1]] = 1
vector_2d[[0, -1], : ] = 1
print(vector_2d)

第三题:5*5随机矩阵归一化

#  看不懂啥意思 -_-
vector = np.random.random((5, 5))
vector
vector2 = (vector - vector.min()) / (vector.max() - vector.min())
vector2
vector3 = (vector - vector.mean()) / vector.std()
vector3
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值