python关于矩阵重复赋值覆盖问题的解决方法


Posted in Python onJuly 19, 2019

本文实例讲述了python关于矩阵重复赋值覆盖问题的解决方法。分享给大家供大家参考,具体如下:

import itertools
import numpy as np
comb = list(itertools.combinations(list(range(regions)), 2))
bands_info = []
coeff = np.zeros([bands, len(comb)])
for cla in range(classes):
  class_info = data[:,cla*bands*regions:(cla+1)*bands*regions]
  for bs in range(bands):
    n = bs*regions
    for i in range(len(comb)):
      index1 = comb[i][0]+n
      index2 = comb[i][1]+n
      part1 = class_info[:, index1]
      part2 = class_info[:, index2]
      coeff[bs, i] = (np.corrcoef(part1, part2))[0, 1]
  bands_info.append(coeff.reshape([1,-1]))
coeff_info = np.vstack((bands_info[0], bands_info[1], bands_info[2],bands_info[3]))

例如这个循环赋值过程,最终得出来的结果是bands_info这个List里面每一个矩阵都是一样的,这是为什么呢?我一开始也在这里纠结了很长时间,思来想去感觉没错的呀。后来想想以前学的C语言知识,才有点明白。原来python里面有浅层copy和深层copy这一说,同是一个矩阵的话占用的是同一个地址,在里面进行重复赋值的话前面的值都会被覆盖掉。不只是当前变量被覆盖掉,就是你之后用到这个变量的也会被覆盖。比如说你a的变量被b覆盖了,那你后面用到a的变量的地方,a的值也会变成b的值。是不是很可怕。

那么应该怎么进行修改呢?

import itertools
import numpy as np
comb = list(itertools.combinations(list(range(regions)), 2))
bands_info = []
for cla in range(classes):
  coeff = np.zeros([bands, len(comb)])
  class_info = data[:,cla*bands*regions:(cla+1)*bands*regions]
  for bs in range(bands):
    n = bs*regions
    for i in range(len(comb)):
      index1 = comb[i][0]+n
      index2 = comb[i][1]+n
      part1 = class_info[:, index1]
      part2 = class_info[:, index2]
      coeff[bs, i] = (np.corrcoef(part1, part2))[0, 1]
  bands_info.append(coeff.reshape([1,-1]))
coeff_info = np.vstack((bands_info[0], bands_info[1], bands_info[2],bands_info[3]))

改成这样就可以了。就是将初始矩阵在循环里在重新设定一遍,意思相当就是给了一次新的地址,再进行复制的话就不会覆盖前面的结果了。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中字典(dict)合并的四种方法总结
Aug 10 Python
Python基于pygame模块播放MP3的方法示例
Sep 30 Python
使用Django和Python创建Json response的方法
Mar 26 Python
Python实现base64编码的图片保存到本地功能示例
Jun 22 Python
python+numpy按行求一个二维数组的最大值方法
Jul 09 Python
django创建超级用户过程解析
Sep 18 Python
详解Python3迁移接口变化采坑记
Oct 11 Python
python 数据库查询返回list或tuple实例
May 15 Python
django为Form生成的label标签添加class方式
May 20 Python
用python按照图像灰度值统计并筛选图片的操作(PIL,shutil,os)
Jun 04 Python
Opencv python 图片生成视频的方法示例
Nov 18 Python
详解OpenCV获取高动态范围(HDR)成像
Apr 29 Python
对Python生成器、装饰器、递归的使用详解
Jul 19 #Python
django中SMTP发送邮件配置详解
Jul 19 #Python
对Python函数设计规范详解
Jul 19 #Python
在django view中给form传入参数的例子
Jul 19 #Python
使用Python制作表情包实现换脸功能
Jul 19 #Python
解决Django一个表单对应多个按钮的问题
Jul 18 #Python
Django工程的分层结构详解
Jul 18 #Python
You might like
PHP得到某段时间区间的时间戳 php定时任务
2012/04/12 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
thinkPHP5.0框架事务处理操作简单示例
2018/09/07 PHP
防止页面被iframe(兼容IE,Firefox火狐)
2010/07/04 Javascript
使用jquery修改表单的提交地址基本思路
2014/06/04 Javascript
基于javascript的JSON格式页面展示美化方法
2014/07/02 Javascript
jquery简单图片切换显示效果实现方法
2015/01/14 Javascript
js实现正则匹配中文标点符号的方法
2015/12/23 Javascript
JS插件overlib用法实例详解
2015/12/26 Javascript
Angular中$state.go页面跳转并传递参数的方法
2017/05/09 Javascript
vue中v-text / v-html使用实例代码详解
2019/04/02 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
如何管理Vue中的缓存页面
2021/02/06 Vue.js
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[04:52]DOTA2亚洲邀请赛附加赛 TOP10精彩集锦
2015/01/29 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python实现简单socket通信的方法
2016/04/19 Python
python在TXT文件中按照某一字符串取出该字符串所在的行方法
2018/12/10 Python
Python使用paramiko操作linux的方法讲解
2019/02/25 Python
Django Form常用功能及代码示例
2020/10/13 Python
python 如何把docker-compose.yaml导入到数据库相关条目里
2021/01/15 Python
CSS实现雨滴动画效果的实例代码
2019/10/08 HTML / CSS
美国巧克力喷泉品牌:Sephra
2019/05/05 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
高分子材料与工程专业个人求职信
2013/12/15 职场文书
社区包粽子活动方案
2014/01/21 职场文书
房地产财务部员工岗位职责
2014/03/12 职场文书
职工代表大会主持词
2014/04/01 职场文书
中药学自荐信
2014/06/15 职场文书
单位授权委托书范本
2014/09/26 职场文书
八项规定自查自纠报告及整改措施
2014/10/26 职场文书
行政后勤人员工作计划应该怎么写?
2019/08/16 职场文书