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中内置的NotImplemented类型的用法
Mar 31 Python
在Python中操作字典之update()方法的使用
May 22 Python
python采集百度百科的方法
Jun 05 Python
python爬虫_微信公众号推送信息爬取的实例
Oct 23 Python
Python实现爬虫设置代理IP和伪装成浏览器的方法分享
May 07 Python
django框架使用方法详解
Jul 18 Python
Python学习笔记之迭代器和生成器用法实例详解
Aug 08 Python
浅析Django中关于session的使用
Dec 30 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
Feb 27 Python
使用Python防止SQL注入攻击的实现示例
May 21 Python
Python 私有属性和私有方法应用场景分析
Jun 19 Python
opencv 图像礼帽和图像黑帽的实现
Jul 07 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面向对象全攻略 (十二) 抽象方法和抽象类
2009/09/30 PHP
ajax+php打造进度条 readyState各状态
2010/03/20 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
Zend Framework教程之模型Model基本规则和使用方法
2016/03/04 PHP
PHP+Ajax实现验证码的实时验证
2016/07/20 PHP
在页面加载完成后通过jquery给多个span赋值
2014/05/21 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
javascript实现动态标签云
2015/10/16 Javascript
谈谈我对JavaScript中typeof和instanceof的深入理解
2015/12/25 Javascript
JavaScript实现Base64编码转换
2016/04/23 Javascript
分享JS数组求和与求最大值的方法
2016/08/11 Javascript
遍历json获得数据的几种方法小结
2017/01/21 Javascript
Vue单文件组件的如何使用方式介绍
2017/07/28 Javascript
React Native仿美团下拉菜单的实例代码
2017/08/08 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
原生js实现弹窗消息动画
2020/11/20 Javascript
[02:58]魔廷新尊——痛苦女王至宝语音台词节选
2020/06/14 DOTA
python检测lvs real server状态
2014/01/22 Python
在Python的setuptools框架下生成egg的教程
2015/04/13 Python
用生成器来改写直接返回列表的函数方法
2017/05/25 Python
Python中定时任务框架APScheduler的快速入门指南
2017/07/06 Python
python得到单词模式的示例
2018/10/15 Python
利用PyCharm Profile分析异步爬虫效率详解
2019/05/08 Python
Python发展史及网络爬虫
2019/06/19 Python
TensorFlow tensor的拼接实例
2020/01/19 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
在python中使用nohup命令说明
2020/04/16 Python
Python闭包装饰器使用方法汇总
2020/06/29 Python
Django框架安装及项目创建过程解析
2020/09/14 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
详解vscode实现远程linux服务器上Python开发
2020/11/10 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
关于孝道的演讲稿
2014/05/21 职场文书
2015年电话销售工作总结范文
2015/04/20 职场文书
2015年环境整治工作总结
2015/05/22 职场文书