python中如何生成一个全是0和1的矩阵?

Python014

python中如何生成一个全是0和1的矩阵?,第1张

溢出测试时,常常需要生成一长串字符串去填充缓冲区,用循环的话比较麻烦。python中直接可以用乘号来操作字符串:

shellcode = '\x90' * 1000

执行后,shellcode的值为1000个\x90。

同时也可以用加号来操作字符串,连接两个字符串的例子如下:

import struct

buffer = 'A' * 100

jmpesp = struct('<L', 0x7ffa4512) #将0x7ffa4512转化为\x12\x45\xfa\x7f的格式

buffer += jmpesp

例如:三阶的单位阵:

unit1=[[1,0,0],[0,1,0],[0,0,1]]

print(unit1)

for i in range(0,3):

for j in range(0,3):

print(unit1[i][j],end=' ')

print()

for i in range(0,3):

print(unit1[i])

shape:形状

dtype:数据类型,可选参数,默认numpy.float64

t ,位域

b,布尔值,true or false

i,整数,如i8(64位)

u,无符号整数,u8(64位)

f,浮点数,f8(64位)

c,浮点负数,

o,对象,

s,a,字符串,s24

u,unicode,u24

order:可选参数,c代表与c语言类似,行优先;F代表列优先

python使用np.zeros可以构造一个相应大小的全部由0组成的矩阵

使用numpy创建矩阵有2种方法,一种是使用numpy库的matrix直接创建,另一种则是使用array来创建。首先加载numpy库,然后分别用上面说的2种方法来分别构建一个4×3的矩阵,如图

请点击输入图片描述

2

矩阵创建好了,大家看到了2个矩阵长得差不多,是否相等呢?我们用==(python中用==表示等于)来试试看看,如下图

请点击输入图片描述

3

我们下面看看2个矩阵相乘的结果,可以看到使用matrix创建的矩阵m1乘以自身,结果报错了:因为矩阵相乘需要满足一定的条件[1];而使用array创建的矩阵m2乘以自身,结果并没有报错,因为这里用的是Hadamard乘法[2]而m1×m2也报错了,说明只要有一个是matrix,就不能用Hadamard乘法,如图所示

请点击输入图片描述

请点击输入图片描述

请点击输入图片描述

4

下面看几个特殊矩阵[3]:使用np.zeros可以生成零矩阵,使用np.ones可以生成1矩阵,使用np.identity可以生成单位矩阵,使用np.diag可以生成对角矩阵,如图所示

请点击输入图片描述

请点击输入图片描述

5

最后看看矩阵的行向量和列向量提取方法。例如m1[[0,3]]表示提取矩阵m1的第0行和第3行[4],当然也可以用m1[[True,False,False,True]]来达到同样的效果,True就是表示对应的行要提取;而m1[:,[-2,-1]]则是提取矩阵的最后2列的列向量,m1[:,[False,True,True]]的一样可以提取最后2列的列向量,如图所示

请点击输入图片描述

请点击输入图片描述

END

注意事项

[1]在高等数学或者线性代数等已经学过了当后面的矩阵的行数等于前面矩阵的列数时,2个矩阵才可以相乘

[2]Hadamard指的是2个m×n的矩阵相乘,结果仍然是m×n的矩阵,结果为对应元素的乘积

[3]单位矩阵是特殊的对角矩阵,零(1)矩阵是指元素全部是0(1)的矩阵

[4]矩阵的第一行是从0开始编号的,python中的各种编号基本上都是从0开始的