Numpy

矩阵运算

# numpy:矩阵运算
import numpy as np
# 读取数据 参数1:数据地址 参数2 delimiter:分隔符 参数3 默认以什么样的形式读取数据
data = np.genfromtxt("ex1data1.txt",delimiter=",",dtype=str)
print(type(data))
print(data)
print(data[1,1])
print(data[:,0:2])
print(help(np.genfromtxt))

# numpy.array中必须是相同的数据类型(区别于list)
# 如下会强制转换为float [1. 2. 3.]
number = np.array([1,2,3.0])
print(number)

vector = np.array([1,2,3,4])
matrix = np.array([[1,2,3],[4,5,6]])
# 向量和矩阵的结构,(行,列) (4,) (2,3)
print(vector.shape)
print(matrix.shape)

vector.max()
vector.min()

# 切片(不包括结束位置元素)
print(vector[1:3])

# 判断 对每一个元素进行比较
# [ True False False False]
# [[ True False False]
#  [False False False]]
print(vector == 1)
print(matrix == 1)

# 将返回的bool当作索引
equal_to_one = (matrix == 1)
print(matrix[equal_to_one])
second_column_25 = (matrix[:,1] == 2)
print(second_column_25)
print(matrix[second_column_25])

# (& == and) (| == or)
if (1 in vector) and (2 in vector):
    print("hava 1 and 2")

# 类型转换
vector1 = vector.astype(float)
print(vector1)

# 求和 axis=1:按行求和   axis=0:按列求和
print(matrix.sum(axis = 1))
print(matrix.sum(axis = 0))

print(np.arange(15))
print(np.arange(15).reshape(3,5))
a = np.arange(15).reshape(3,5)

print(a.ndim)   # 维度
print(a.dtype.name)
print(a.shape)
print(a.size)   # 元素总个数

zero = np.zeros((3,4))
one = np.ones((2,3))
print(zero)
print(one)

# (起始,结束(不包括),间距)   [ 0  5 10 15]
print(np.arange(0,20,5))

# random:随机产生(0,1)之间的数据
# ()括号里面是产生的矩阵形式
print(np.random.random((5,3)))
# 前两个参数是范围,第三个是个数
np.random.randint(1,5,3)

# linspace:指定一个区间和想要的得到的数据个数,但不指定数据之间的间隔
print(np.linspace(1,10,11))

# 矩阵运算
x = np.array([[1,2],[0,1]])
y = np.array([[1,2],[3,4]])
# 对应位置相减,取平方
print(x - y)
print(x - 1)
print(x ** 2)
print(x < 2)   #[ True False False False]
print(x * y)   # 对应位置
print(x.dot(y))   # 矩阵运算  np.dot(x,y)
print(x.ravel())   # 矩阵 <---> 向量
print(x.ravel().reshape(2,2))   #reshape(num,-1) 当指定一个后,另一个也随之确定

print(x)
print(np.hstack((x,y)))   # 矩阵横拼接
print(np.vstack((x,y)))   # 矩阵竖拼接
print(np.hsplit(x,2))   #行切分 (x,切分块数)
print(np.vsplit(x,2))   #列切分

z = x   # z,x指向同一地址,改变其中一个,另一个也随之改变
z.shape = (1,4)
print(x)
print(z is x)   # true

p = y.view()   # 浅复制,指向不同的地址,shape是独立的;但是元素值是共用的,改变其中一个,另一个也随之改变
p.shape = (1,4)
print(y)
print(y is p)   # false

q = x.copy()   # 深复制,相互独立

# 其他运算
print(np.arange(3))
print(np.exp(np.arange(3)))
print(np.sqrt(np.arange(3)))
print(np.floor(1.2))   #向下取整

data = np.array([[1,2,3],[4,5,6]])
print(data.argmax(axis=0))   # 最大值的索引 axis=0:按列  axis=1:按行
# range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
print(data.argmax(axis=0),range(data.shape[1]))   # 等价于下一行
print(data[[1,1,1],[0,1,2]])

a = np.arange(0,40,10)
b = np.tile(a,(2,3))   # 扩展,(2,3)行扩展两倍 列扩展3倍
print(b)

a = np.array([[4,2,5],[3,5,2]])
print(np.sort(a,axis=1))   # axis=0:按列   axis=1:按行
print(np.argsort(a))   # 索引排序

Tips

  • 不要在shape是(n,)或一维行向量使用数据结构,相反应该建立(n,1)的列向量
import numpy as np
a = np.random.randn(5)
# a.shape: (5,)
np.dot(a,a.T) 
# 结果为一个实数,而非5*5数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值