#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,就会生成相同的数字
#设置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):从后往前读:理解意思为先画一个32的矩阵,再用2个3*2包起来
④输出维度的个数 x,ndim
就是shape括号里有多少个数字 shape=(2,3,2) ndim=3
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列
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]]]