当前位置: 主页 > Python语言

python 声明数组-c++声明对象数组

发布时间:2023-02-09 10:25   浏览次数:次   作者:佚名

python中不同维度数组之间的转换

在学习python实战第二章的时候,遇到一个操作,就是把一个32*32的数组转成1*1024的数组。 自己写了一个操作,感觉还可以python 声明数组,打印出来的结果看起来也没错,但是对于下面的执行错误,先附上自己的代码:

def datatreating(filename):
 fo = open(filename)

python 声明数组_c++声明对象数组_声明数组元素

filelist = fo.readlines() resultvector = [] for line in filelist: line = line.strip() resultvector.append(line)

声明数组元素_c++声明对象数组_python 声明数组

resultvector = reduce(lambda x,y:x+y,resultvector) return resultvector

但是在后续的处理过程中会出现类型不匹配的情况。

附上书上的代码(我修改了函数名和变量名,方便和自己的代码对比):

python 声明数组_声明数组元素_c++声明对象数组

def datatreating(filename): resultvector = zeros((1,1024)) fr = open(filename) for i in range(32): lineStr = fr.readline()

声明数组元素_python 声明数组_c++声明对象数组

for j in range(32): resultvector[0,32*i+j] = int(lineStr[j]) return resultvector

书中的代码完美运行。

那么现在我们来分析一下这两段代码的异同点

python 声明数组_c++声明对象数组_声明数组元素

先看书上的处理方法:前面声明了一个1*1024的list resultvector,打开数据文件。 原始数据文件的内容是一个32*32的数组。 循环遍历每一行,设置一个lineStr存放读取到的行数据,然后对这一行中的每条数据进行强制塑性变换,赋值给resultvector,赋值位置为[0,32*i+j],即,顺序分配给第一行。 最后的结果是一个1*1024个元素的列表。

再看看我写的方法: 前面的操作基本一样,声明一个未指定大小的数组resultvector,打开文件。 那么这里的处理方式就和原文中的不一样了。 这里我们使用 readlines() 函数。 不知道的点这个链接:read/readline/readlines Python读取文本时得到一个list filelist,然后对list的每一行执行循环,捏住头尾空格,使用append()函数,将文件列表的每一行附加到结果向量的后面,然后使用 reduce 将它们链接到一个元素的数组中。

打印出来的效果看起来是一样的,但是两种处理方式明显不同。 一种是处理单个元素,它是一个包含 1024 个元素的数组,另一种是将每一行作为一个整体来处理。 变成了单个数组python 声明数组,这个数组只有一个元素,这个元素是一个包含1024个元素的列表,所以后面调用函数的时候,会导致类型不匹配的错误。

其中,将append()函数替换为extend()函数是一样的。 如果使用了extend()函数,那么这句resultvector = reduce(lambda x,y:x+y,resultvector)并不是用来做链接处理的,而是处理结果或者一个元素的数组。

希望大家多提意见,改进我原来的处理方式,使其也能处理数组转换问题。