numpy入门 python 切片索引 合成 分割 创建数组 矩阵相乘

Introduction to numpy

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))
#(3,) 
#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))
#[[ 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] 
#可以理解为两个小列表作为一个大列表的元素
print(a[0:1])
#[[1,2,3]]
print(a[:,2:])
#[[3]
# [6]]
#注意,如果中间加逗号,则意味着前面对行进行操作,后面对列进行操作
print(a[:,0])
#[1,4]
#注意,如果单独用整数索引或者切片,数组会保持原来的维度,但如果两者混用,则会导致降维

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]]

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]]
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值