频道澳门葡京手机版网址
登录注册
澳门葡京手机版网址 > 澳门葡京手机版网址 > App开发 > 其他 > 正文
python中关于不同维数组之间的转换
2018-08-15 11:01:20           
收藏   我要投稿

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

在学习python实战的第二章时,遇到一个操作,是将32*32的数组转换成一个1*1024的数组,我自己写了一个操作,感觉还可以,打印结果看着也对,但后面的实行错误,先附上自己的代码:

def datatreating(filename):
 fo = open(filename)
 filelist = fo.readlines()
 resultvector = []
 for line in filelist:
  line = line.strip()
  resultvector.append(line)
 resultvector = reduce(lambda x,y:x+y,resultvector)
 return resultvector

但是在后面处理过程中会出现类型不匹配的情况发生。
附上书中代码(自己对函数名和变量名进行了修改,以便能和自己的代码作比较):

def datatreating(filename):
 resultvector = zeros((1,1024))
 fr = open(filename)
 for i in range(32):
  lineStr = fr.readline()
  for j in range(32):
resultvector[0,32*i+j] = int(lineStr[j])
 return resultvector

书中代码能完美运行。

那么现在大家就来分析这两段代码的异同之处

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

再来看自己写的方法: 前面的操作基本一样,声明一个未指明大小的数组resultvector,打开文件。然后这里的处理方法和原文中不同,这里大家用了readlines()函数,不知道的点击这个链接:Python 读取文本时的 read/readline/readlines 得到了一个列表filelist,然后对列表的每一行进行循环,掐头去尾空格,使用了append()函数,将filelist每一行附到resultvector的后面,然后使用reduce将他们链接成一个元素的数组。

打印出来效果看起来是一样的,但是两种处理方法明显不同,一个是对其中单个元素进行处理,处理下来就是一个1024个元素的数组,一个是对每一行进行整体处理,这样的话处理下来就成了一个单一的数组,这个数组有一个元素,这个元素为一个包含1024个元素的列表,所以后面函数调用的时候就会造成类型不匹配的错误。

其中,append()函数换成extend()函数也是一样的,使用extend()函数的话就不用resultvector = reduce(lambda x,y:x+y,resultvector)这句话进行链接处理了,但是处理结果还是一个元素的数组。

希翼大家能提出意见,对我原本的处理方法的改进,使之能同样处理数组转换问题。

点击复制链接 与好友分享!回澳门葡京手机版网址澳门葡京手机版网址
相关TAG标签 python 数组 转换
上一篇:多幅图像检测连续两张含有相同缺陷位置图像
下一篇:C++11 override解析
相关文章
图文推荐
点击排行

关于大家 | 联系大家 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 澳门葡京手机版网址_澳门新莆京娱乐_www.88807.com - 点此进入--致力于做实用的IT技术学习网站

XML 地图 | Sitemap 地图