numpy包


#include
using namepace std;
int main(){
  return 0;
}

目录:
一、基础知识
seed
数组
函数
二、索引(Indexing)
索引
切片
整数数组索引
布尔值数值索引
三、线性代数运算
基本运算
点乘
跨维求和
转置
四、数组的高级操作
np.tile()函数
广播
维度变化
删除维度
增加维度

基础知识

#引入numpy
import numpy as np
1、seed用法:

np.random.seed()
如果seed()里不加种子,就会生成随机数
如果seed()添加东西例如seed=1234,就会生成相同的数字


numpy包_第1张图片
#设置seed,使得多次生成的随机数相同
np.random.seed(1234)
2、数组的基本操作

①定义数组:
x=np.array(书写矩阵)
②输出数组:
print(x)
③输出维度:x.shape
什么是维度?
[1,2,3]是一维数组 输出格式:(3,) 数组的长度为3
[[1,2,3],[4,5,6]]是二维数组 输出格式 (2,3)是23的矩阵
[[[1,2],[3,4],[5,6]],[[1,2],[3,4],[5,6]]] 输出(2,3,2):从后往前读:理解意思为先画一个3
2的矩阵,再用2个3*2包起来
④输出维度的个数 x,ndim
就是shape括号里有多少个数字 shape=(2,3,2) ndim=3

numpy包_第2张图片

3、函数
np.zeros((2,2)) #生成一个全为0的2*2矩阵
np.ones((2,2)) #生成一个全为1的2*2矩阵
np.eye((2))#生成一个2阶单位矩阵
np.random.random((2,2))#生成一个2*2随机矩阵

索引

1、索引

和普通数组无区别,x[0]就可以输出x数组0号位置的元素

x=np.array([1,2,3])
print("x[0]:",x[0])
x[0]=0
print("x:",x)
output:
x[0]: 1
x: [0 2 3]
2、切片

x[:,:]中的冒号代表切片区域,逗号前代表行,后代表列
x[:,1] 行全部保留,列中的第一列切出来
x[1,:] 列全部保留,行中的第一行切出来
x[:3,1:3] 行的前三行和列的1~2列


numpy包_第3张图片
3、整数数组索引
print(x)
rows_to_get=np.arange(len(x))#x一共有三行
print("rows_to_get:",rows_to_get)
cols_to_get=np.array([0,2,1])#每行分别输出第0、2、1列元素
print("cols_to_get:",cols_to_get)
print("indexed values:",x[rows_to_get,cols_to_get])#输出(0,0)(1,2)(2,1)位置元素
output:
[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]
rows_to_get: [0 1 2]
cols_to_get: [0 2 1]
indexed values: [ 1  7 10]
4、布尔值数组索引

print(x>2) #输出每一个元素是否>2的布尔值
print(x[x>2]) #输出>2的各个元素

x=np.array([[1,2],[3,4],[5,6]])
print("x:\n",x)
print("x>2:\n",x>2)#判断每一位是否大于2
print("x[x>2]:\n",x[x>2])#输出大于2的index
output:
x:
 [[1 2]
 [3 4]
 [5 6]]
x>2:
 [[False False]
 [ True  True]
 [ True  True]]
x[x>2]:
 [3 4 5 6]

线性代数运算(dtype=np.float64)

1、基本运算

np.add(x,y) #加法
np.subtract(x,y) #减法
np.multiply(x,y) #乘法

2、点乘 a·b

a.dot(b)

3、跨维求和

np.sum(x) # 将所有元素相加
np.sum(x, axis=0) # 将每列的元素相加 axis=0
np.sum(x, axis=1) # 将每行的元素相加 axis=1

x=np.array([[1,2],[3,4]])
print(x)
print("sum all:",np.sum(x))#所有元素相加
print("sum by col:",np.sum(x,axis=0))#将每列的元素相加 axis=0
print("sum by row:",np.sum(x,axis=1))#将每行元素相加 axis=1
output:
[[1 2]
 [3 4]]
sum all: 10
sum by col: [4 6]
sum by row: [3 7]
4、转置

x.T #竟然就可以了!!

数组高级操作

1、np.tile()函数

https://www.jianshu.com/p/4b74a367833c

2、广播

当对两个形状不同的array按元素运算时,可能会触发广播(broadcasting)机制:先适当复制元素使这两个NDArray形状相同后再按元素运算。

x = np.array([[1,2], [3,4]])
y = np.array([5, 6])
z = x + y #将[5,6]广播
print ("z:\n", z)
output:
z:
 [[ 6  8]
 [ 8 10]]
3、维度变化

通过x.shape(x,(2,3)) 可以将x从32变为23的矩阵,当然变化过程中必须要保证数组元素不能发生变化,23==32

x=np.array([[1,2],[3,4],[5,6]])
print(x)
print("x.shape:",x.shape)
y=np.reshape(x,(2,3))#更改数组的形状
print("y.shape:",y.shape)
print("y:\n",y)
output:
[[1 2]
 [3 4]
 [5 6]]
x.shape: (3, 2)
y.shape: (2, 3)
y:
 [[1 2 3]
 [4 5 6]]

4、删除维度

np.squeeze(x) #将进行删除数组形状中的单维度条目(shape中为1的那些),其他的不起作用

x=np.array([[[1,2,1]],[[2,2,3]]])
print("x.shape:",x.shape)
print("x:",x)
y=np.squeeze(x) #删除维度1
print("y.shape:",y.shape)
print("y:",y)
output:
x.shape: (2, 1, 3)
x: [[[1 2 1]]

 [[2 2 3]]]
y.shape: (2, 3)
y: [[1 2 1]
 [2 2 3]]
5、增加维度

和删除维度相反的

x=np.array([[1,2,3],[2,2,3]])
print("x.shape:",x.shape)
y=np.expand_dims(x,1)
print("y.shape:",y.shape)
print("y:\n",y)
output:
x.shape: (2, 3)
y.shape: (2, 1, 3)
y:
 [[[1 2 3]]

 [[2 2 3]]]

你可能感兴趣的:(numpy包)