Are you sure you want to delete this access key?
import numpy as np
1.创建数组
#维数与中括号对数有关
print(np.array([1,2,3]))
#1 dimension [1,2,3]
print(np.array([[1,2,3]]))
#2 dimensions [[1,2,3]]
2.转置矩阵
#不改变维度,一维不变
a = np.array([1,2,3])
print(np.transpose(a))
#[1,2,3]
b = np.array([[1,2,3]])
print(b.T)
#[[1]
# [2]
# [3]]
3.矩阵属性
#1 dimension
a = np.array([1,2,3])
print(np.shape(a))
print(a.shape)
#需要注意有两种方式表达
#(3,)
#(3,)
print(a.shape[0])
#3
print(type(a.shape))
#<class 'tuple'>,元组是支持索引的
#2 dimensions
b = np.array([[1,2,3],[4,5,6]])
print(np.shape(b))
#(2,3)
#改变属性
c = b.reshape(3,2)
print(c)
#[[1 2]
# [3 4]
# [5 6]]
#需要注意的是,原先的矩阵不会发生改变,需要重新赋一个
4.矩阵相乘
a = np.array([[1,2,3]])
b = np.array([[4,5,6]])
print(np.dot(a.T,b))
print(a.T @ b)
#两者结果一样
#[[ 4 5 6]
# [ 8 10 12]
# [12 15 18]]
#注意满足列数等于行数
data = np.transpose(np.array([[1, 2], [1, 3], [2, 1], [1, -1], [2, -1]]))
th = np.array([[1], [1]])
th0 = -2
def signed_dist(x, th, th0):
return (np.dot(th.T, x) + th0) / length(th)
#注意,这里是矩阵整体运算,而不是单指某个元素
5.返回判断正负性
#正数返回1,零返回0,负数返回-1
print(np.sign(1))
# 1
print(np.sign(0))
# 0
print(np.sign(-1))
# -1
6.求和
a = np.array([[1,2,3],[4,5,6]])
print(np.sum(a))
#21 不加参数为全部求和
print(np.sum(a,axis = 0))
#[5,7,9]
#看最外面的中括号,里面的元素为[1,2,3],[4,5,6],两个列表之间进行操作
print(np.sum(a,axis = 1))
#[6,15]
#看最里面的中括号,里面的元素是不是一个为1,2,3.另一个是4,5,6,那元素之间进行求和,两者互不干扰
#同样的axis原则适用于np其他函数
test = [[ True True False False True]]
print(np.sum(test,axis = 1))
#[3]
print(np.sum(test,axis = 1,keepdims = True))
#[[3]]
#记住sum之后会清除axis确定的维度,如果需要保留,需要将keepdims = True
7.索引与切片
a = np.array([[1,2,3],[4,5,6]])
print(a[0])
#[1,2,3]
b = np.array([[1,2,3,1,4]])
print(b[2])
#IndexError: index 2 is out of bounds for axis 0 with size 1
#整数索引时以里面的小列表为元素,另外注意行向量于列向量的区别
print(a[0:1])
print(a[0:1,])
#[[1,2,3]]
#[[1,2,3]]
print(a[:,2:])
#[[3]
# [6]]
#注意,如果中间加逗号,则意味着前面对行进行操作,后面对列进行操作
print(a[:,0])
#[1,4]
#注意,如果单独用整数索引或者切片,数组会保持原来的维度,但如果两者混用,则会导致降维
data = np.array([[1,2,3],[4,5,6]])
print(data[:,[0,2,1]])
#[[1 3 2]
# [4 6 5]]
#需要注意索引可以是列表,这样就等同于更改原数据进行一个洗牌,评估算法的时候更精确,同样是保持原型的
x = np.array([[1,3], [4,5], [5,6]])
print(x[0])
# array([1,3])
# 当多个索引时:
print(x[[0, 1]]
# array([[1, 3],
# [4, 5]])
8.行向量与列向量
#row vector
a = np.array([[1,2,3,4]])
#column vector
b = np.array([[1],[2],[3]])
#接收一个列表变为行向量
t = np.array([value_list])
#接收一个列表变为列向量
q = t.T or np.transpose(t)
9.数组的长度
a = np.array([[1,2,3]])
print(np.sum(a * a)**0.5)
#3.7416573867739413
#与求向量的模类似
10.布尔值判断
g = np.array([[1.,-1.,1.,1.,-1.]])
labels = np.array([[1.,-1.,-1.,-1.,-1.]])
print(g == labels)
#[[ True True False False True]]
#需要注意的是,numpy对布尔值也可以求和,
print(np.sum(g == labels))
#3
True = 1,False = 0
#还可以一对多布尔值判断
print(np.array([[1,2,3,4]]) == 1)
#[[ True False False False]]
if np.array([[1]]) == 1:
print("yep!")
#yep!
#需要注意的是虽然是一个列表,在条件判断上可以等价为单独的True or False
#如果判断的两个列表长度不一样,会单独False,而且会警告
t1 = np.array([[1, 2, 3]])
t2 = np.array([[1, 2, 3, 4]])
print(t1 == t2)
# DeprecationWarning: elementwise comparison failed; this will raise an error in the future.
# print(t1 == t2)
# False
t3 = np.array([[1, 2, 3, 4]])
print(np.equal(t2,t3))
#[[ True True True True]]
#同型矩阵用equal
#注意如果是矩阵与单元素判断,矩阵元素个数必须等于1
if np.array([[1]]) > 0:
print(1)
#1
if np.array([[1,2]]) > 0:
print(2)
#ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
11.返回最大值索引
a = np.argmax(np.array([[1,2,3,4,5,6]]))
print(a)
#5
12.分割处理
a = np.array([[1,2,3,4,5],[6,7,8,9,0]])
print(np.array_split(a,5,axis = 1))
#[array([[1],
# [6]]), array([[2],
# [7]]), array([[3],
# [8]]), array([[4],
# [9]]), array([[5],
# [0]])]
#axis不再赘言,split之后会产生列表,跟Python语法一样的
13.拼接
a = np.array([[1]])
b = np.array([[2]])
print(np.concatenate((a,b),axis = 1))
#[[1 2]]
b = np.array([[1,2,3,4,5],[6,7,8,9,0]])
b_div = np.array_split(b,5,axis = 1)
print(np.concatenate(b_div[0:3]+b_div[4:],axis = 1))
#[[1 2 3 5]
# [6 7 8 0]]
c = np.array([[1,2,3],[4,5,6]])
d = np.array([[0,9,8],[7,6,5]])
# 按行拼接,行数需相等,左右
print(np.c_[c,d]) # 注意必须是方括号,不要误做()
#[[1 2 3 0 9 8]
# [4 5 6 7 6 5]]
# 按列拼接,列数需相等,上下
print(np.r_[c,d])
# [[1 2 3]
# [4 5 6]
# [0 9 8]
# [7 6 5]]
# 注意,当dim >= 2时满足如上,当dim = 1时,相反
p = np.zeros((4,))
q = np.zeros((4,))
np.c_[p,q]
#array([[0., 0.],
# [0., 0.],
# [0., 0.],
# [0., 0.]])
np.r_[p,q]
# array([0., 0., 0., 0., 0., 0., 0., 0.])
14.生成特定向量
# 没有加维度,默认一维
print(np.zeros(5))
# [0. 0. 0. 0. 0.]
# 可以设置维度
print(np.zeros((2, 1)))
#[[0.]
# [0.]]
# 改变元素类型
print(np.zeros((2, 1), dtype=int))
#[[0]
# [0]]
#需要十分小心和注意的是,如果要几X几的矩阵,必须套一个括号!!!(2,1)
15.一对多属性
#矩阵所有元素相加一个数
test = np.array([[1,2,3]])
print(test + 1)
#[[2 3 4]]
a = np.array([[1]])
b = np.array([[1, 2, 3]])
print(a + b)
#[[2 3 4]]
#矩阵所有元素与一个值做判断
print(test == 2)
#[[False True False]]
16.注意点
data = [[1,2,3],[4,5,6]]
print(data[:,0:1])
#TypeError: list indices must be integers or slices, not tuple
#因为你没有用np.array
data = np.array([[1,2,3],[4,5,6]])
#注意计算机中的运算逻辑,如果拿不准,一定要套括号
def sd(th, th0, x):
return np.dot(th, x) + th0 / (np.sum(th * th) ** 0.5)
#[[2.17157288]]
#[[-0.82842712]]
#[[3.17157288]]
def sd(th, th0, x):
return (np.dot(th, x) + th0) / (np.sum(th * th) ** 0.5)
#[[0.70710678]]
#[[-1.41421356]]
#[[1.41421356]]
#需要注意不同列表推导式生成的是列表不错,但两者具有不同的维度
x = [range(100)]
y = [i for i in range(100)]
print(type(x))
print(type(y))
print(np.shape(x))
print(np.shape(y))
#<class 'list'>
#<class 'list'>
#(1, 100)
#(100,)
17.随机数字生成
# 随机生成数字
print(np.linspace(2,6,num = 4))
# [2. 3.33333333 4.66666667 6. ] # 始末点是你输入的
a = np.linspace(2,8,num = 4,endpoint = False)
print(a)
# [2. 3.5 5. 6.5]
print(type(a))
# numpy.ndarray
# 类似的,还有一个指数空间,10的指数次
print(np.logspace(3,7,num = 4))
# [1.00000000e+03 2.15443469e+04 4.64158883e+05 1.00000000e+07]
# 随机生成一个小数
print(np.random.uniform(0.,1.))
# 0.01437751259085529
# 随机生成0,1小数
x = np.random.uniform(size = 1000)
print(x)
print(type(x))
# class 'numpy.ndarray'>
print(np.random.rand(3,2))
#[[0.5488135 0.71518937]
# [0.60276338 0.54488318]
# [0.4236548 0.64589411]]
# rand的用法与zeros是一样的,生成几叉几的,但不同的是zeros需要套括号,而rand不用
print(np.random.rand(4, 1))
print(np.zeros((4, 1)))
# 如果一个数,就是一维的列表
print(np.random.rand(3))
#[0.12277558 0.57764143 0.59843161]
# 如果要求生成的随机数可以被预测,可以用np.random.seed(k)当然k可以任取
np.random.seed(0)
print(np.random.rand(3,1))
#[[0.52372051]
# [0.6603495 ]
# [0.64741481]]
np.random.seed(0)
print(np.random.rand(3,1))
#[[0.52372051]
# [0.6603495 ]
# [0.64741481]]
# 你会发现生成的随机数是一样的
18.洗牌
lis = [1,2,3,4,5]
np.random.shuffle(lis)
print(lis)
#[4, 5, 3, 1, 2]
# 需要注意的是shuffle是作用于列表,所以,列表是动态修改的,如果直接打印更改的,会是"None",需要直接打印列表本身
19.求平均值
a = np.array([[1,2,3],[4,5,6]])
print(np.mean(a))
#3.5
print(np.mean(a,axis = 0))
#[2.5 3.5 4.5]
print(np.mean(a,axis = 1))
#[2. 5.]
print(np.mean(a, axis=0, keepdims=True))
#[[2.5 3.5 4.5]]
print(np.mean(a, axis=0, keepdims=True,dtype = int))
#[[2 3 4]]
# 所有参数用法均与np.sum一样,不多赘述
20.拓展维度
a = np.array([1,2,3])
b = np.expand_dims(a,axis = 0)
c = np.expand_dims(b,axis = 1)
d = np.expand_dims(b,-1)
print(a.shape)
print(b.shape)
print(c.shape)
print(d.shape)
------
(3,)
(1,3)
(1,1,3)
(1,3,1)
------
# axis = 0 最左边加一个维度
# axis = 1 中间加一个维度
# axis = -1 最右边加一个维度
21.生成序列数据
# grammar
a = np.arange(start = ,end = ,step = ,dtype = )
# case
a = np.arange(1,9,1,dtype = "int")
print(a)
# [1 2 3 4 5 6 7 8] 不包括最后一个
print(type(a))
# <class 'numpy.ndarray'>
# 结果是以array形式呈现
22.将单个数据变成向量
a,b = 0,1
a,b = np.meshgrid(a,b)
print(a,b)
# [[0]][[1]]
print(a.shape)
# (1,1)
z = np.meshgrid(a,b)
print(z)
# [array([[0]]), array([[1]])]
import matplotlib.pyplot as plt
y = np.arange(1,3,1)
# [1,2]
plt.scatter(z,y)
plt.show()
# 在matplotlib里面,当数据以列表或者array出现时,都可以接受
23.降维拉平
a = np.zeros((3,4))
# 将数据变为一维
b = a.ravel()
print(b)
# [0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.]
24.生成下三角矩阵
a = np.array([[1,2,3],[4,5,6],[7,8,9],[1,2,4]])
# 0表示第二行开始
print(np.triu(a,0))
# array([[1, 2, 3],
# [0, 5, 6],
# [0, 0, 9],
# [0, 0, 0]])
# -1表示第三行开始
print(np.triu(a,-1))
# array([[1, 2, 3],
# [4, 5, 6],
# [0, 8, 9],
# [0, 0, 4]])
# 1表示从第一行开始
print(np.triu(a,1)
# array([[0, 2, 3],
# [0, 0, 6],
# [0, 0, 0],
# [0, 0, 0]])
25.生成上三角矩阵
a = np.array([[1,2,3],[4,5,6],[7,8,9],[1,2,4]])
print(np.tril(a,0))
# [[1 0 0]
# [4 5 0]
# [7 8 9]
# [1 2 4]]
print(np.tril(a,-1))
#array([[0, 0, 0],
# [4, 0, 0],
# [7, 8, 0],
# [1, 2, 4]])
Press p or to see the previous file or, n or to see the next file
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?
Are you sure you want to delete this access key?