矩阵

二维前缀和

穿精又带淫゛_ 提交于 2020-01-30 00:35:59
题目大致意思求最大矩阵 输入k 矩阵元素和不超过k #include<stdio.h> #include<iostream> #include<algorithm> typedef long long ll ; using namespace std ; ll a [ 255 ] [ 255 ] ; ll sum [ 255 ] [ 255 ] ; int main ( ) { ll k ; int m , n ; ll ma1 = 0 ; cin > > m > > n > > k ; for ( int i = 1 ; i < = m ; i + + ) for ( int j = 1 ; j < = n ; j + + ) cin > > a [ i ] [ j ] ; for ( int i = 1 ; i < = m ; i + + ) for ( int j = 1 ; j < = n ; j + + ) { sum [ i ] [ j ] = a [ i ] [ j ] + sum [ i- 1 ] [ j ] + sum [ i ] [ j- 1 ] -sum [ i- 1 ] [ j- 1 ] ; / / printf ( "sum[%d][%d]=%d\n" , i , j , sum [ i ] [ j ] ) ; } for ( int i = 1 ; i

[Python] numpy

耗尽温柔 提交于 2020-01-30 00:06:36
numpy中array的特性: https://www.jianshu.com/p/a75e522d5839# https://blog.csdn.net/zenghaitao0128/article/details/78300770 相关操作: #两个元素的向量 a = np.array([1,2]) #1X2矩阵 a1 = np.array([[1,2]]) #2X1矩阵 a2 = np.array([[1],[2]]) #三个元素的向量 b = np.array([1,2,3]) #1X3矩阵 b1 = np.array([[1,2,3]]) #3X1矩阵 b2 = np.array([[1],[2],[3]]) #3X2矩阵 c = np.array([[1,1],[1,2],[1,3]]) #2X2矩阵,不同维矩阵相加,先扩维 print(a1+a2) #1X2矩阵,向量加矩阵,扩为行矩阵 print(a+a1) #2X2矩阵,向量转为行矩阵,然后矩阵扩维 print(a+a2) #报错,向量元素个数不相等 print(a+b) #三个元素的向量,矩阵乘向量 print(np.dot(c,a)) #报错,不符合矩阵乘法定义 print(np.dot(c,a1)) #3X1矩阵,矩阵乘法 print(np.dot(c,a2)) 矩阵乘法按定义,矩阵加法会扩维

指针(二)

倖福魔咒の 提交于 2020-01-29 22:16:12
指针与数组 指向数组的指针 数组是内存中一块连续的区域,存储着相同类型的数据,在声明一个数组时,会开辟两个空间,一个用于保存数组元素,一个用来保存数组的第一个元素的地址,数组名就是用于保存数组第一个元素地址的指针。 指向一位数组的指针 int a1 [ 100 ] ; int n ; n = * a1 ; //n 为数组a1第一个元素的值 n = * ( a1 + 5 ) ; // 数组a1的第6个元素 尽管指针与数组之间有密切的关系,但是指针类型变量是可以不断进行赋值,在程序运行过程中可以发成变化,数组名虽然是指针,但是是一种指针类型的常量,只能指向固定的内存地址,不能将一个指针值赋值给一个数组名,同时在程序运行的过程中是不能发生改变。 指向多维数组的指针 例如:二维数组相当于一个二维表格,二维数组具有首地址,行首地址,元素地址等,数组名代表首地址,称为二维数组的指针,行首地址是二维数组中某一行的首地址,每行相当于一个一维数组,元素地址是二维地址中具体的分量。 int a [ 4 ] [ 5 ] ; // a代表整个二维数组的首地址,*a代表是第0行首地址,a[0]代表第i行的首地址 指向字符串的指针 char * str1 = "string1" ; 指针数组与指向指针的指针 指针数组 数组元素均为指针类型数据的数组。指针数组中的每个元素都相当于一个指针变量。 int * p

多维数组和矩阵的基础题型

蓝咒 提交于 2020-01-29 16:53:01
本文主要介绍关于多维数组和矩阵的题型,从基础开始逐步深入。 一、顺时针打印矩阵 如下图: 解题方法:把矩阵分解为多个矩形框,从最外层开始打印,每次循环打印一个矩形框,一个循环里用四个while循环打印,每个while循环打印一个矩形的一条边。(用矩阵框的两个顶点进行循环的控制,当左上角的行号小于右下角的行号就退出外层循环) 代码如下: public class 顺时针打印矩阵 { public static void main ( String [ ] args ) { int [ ] [ ] a = { { 1 , 2 , 3 , 4 } , { 5 , 6 , 7 , 8 } , { 9 , 10 , 11 , 12 } , { 13 , 14 , 15 , 16 } } ; print ( a ) ; } private static void print ( int [ ] [ ] a ) { int leftUpRow = 0 ; int leftUpCol = 0 ; int rightLowRow = a . length - 1 ; int rightLowCol = a [ 0 ] . length - 1 ; while ( leftUpRow <= rightLowRow ) { int row = leftUpRow ; int col =

朝花夕拾之Matlab矩阵运算

不羁岁月 提交于 2020-01-29 15:21:44
矩阵运算 1. 加、减运算 运算符:“+”和“-”分别为加、减运算符。 运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。 例1-22 >>A=[1, 1, 1; 1, 2, 3; 1, 3, 6] >>B=[8, 1, 6; 3, 5, 7; 4, 9, 2] >>A+B=A+B >>A-B=A-B 结果显示:A+B= 9 2 7 4 7 10 5 12 8 A-B= -7 0 -5 -2 -3 -4 -3 -6 4 2. 乘法 运算符:* 运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。 1.两个矩阵相乘 例1-23 >>X= [2 3 4 5; 1 2 2 1]; >>Y=[0 1 1; 1 1 0; 0 0 1; 1 0 0]; Z=X*Y 结果显示为: Z= 8 5 6 3 3 3 2.矩阵的数乘:数乘矩阵 上例中:a=2*X 则显示:a = 4 6 8 10 2 4 4 2 向量的点乘(内积):维数相同的两个向量的点乘。 数组乘法: A.*B表示A与B对应元素相乘。 3 .向量点积 函数 dot 格式 C = dot(A,B) %若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。 C = dot(A,B,dim) %在dim维数中给出A与B的点积

Iterative CBCT reconstruction using Hessian penalty

半城伤御伤魂 提交于 2020-01-29 15:09:13
TV正则作为惩罚项具有明显的阶梯效应,会使图像不自然,这篇文章为了解决这个问题,提出了利用图像Hessian矩阵的Frobenius范数的二阶导数作为惩罚项进行CBCT重建,可以有效抑制TV惩罚项的阶梯效应。 TV惩罚项优先最小化一阶导数,因此往往具有分段函数结果。在这次研究当中,我们提出了使用hessian惩罚来进行CBCT重建。这就会涉及到图像的hessian矩阵的F范数来抑制TV惩罚中的阶梯效应。其中,Hessian惩罚是二阶导数惩罚。这背后的动机是二阶导数对于相邻像素之间的绝对差有较弱的惩罚,并且允许分段地平滑重建结果。 对于之前的重建方法,大多数的惩罚项都是二次式的,因此相关目标函数的优化可以直接进行,例如 高斯-赛德尔 和 共轭梯度法 。 但是不幸的是hessian惩罚不是二次式的,这就会让目标函数的最小化具有挑战性。作者发展了一种有效的算法来最小化目标函数—MM算法。 图像去噪的能量泛函: 第一项式加权最小二乘元作为(WLS)或数据保真项。对角线矩阵Σ的元素在WLS损失函数中起着加权的角色,决定着每项的贡献。第二项是先验约束或一个惩罚项。图像重建任务是通过最小化具有正约束的目标函数来找到一个衰减系数图像μ hessian惩罚 由于上式中的先验约束强制了平滑约束,图像的TV最小化在CBCT重建中在噪声抑制和边缘保持中显示了良好的作用。让μ是连续可微的三维图像

python散点图及相关系数矩阵计算和相关性验证

拜拜、爱过 提交于 2020-01-29 06:44:10
python散点图及相关系数矩阵计算 # -*- coding:utf-8 -*- # __author__ = "LQ" import matplotlib.pyplot as plt import pandas as pd import scipy.stats as stats #自定义方法调用,上一篇有该方法 from DataAnalysis.TeachingModel.dbc import dbcConnect def main(sql): df = dbcConnect.selectDf(sql) print(df) # pearson相关系数矩阵 corr = df.corr() print(corr) #计算某一个元素相关 print(df.corr()[u'avg_getscore']) # 输出结果第一个值为pearsonr相关系数, # 第二个为p-value,所以这里Guba列和Value值是显著相关的 pearsonr = stats.pearsonr(df['avg_total_afterrequire_num'], df['avg_getscore']) print(pearsonr) # 散点图矩阵 pd.plotting.scatter_matrix(df, figsize=(8, 8), c='k', marker='+', diagonal=

转:奇异值分解与特征值分解

偶尔善良 提交于 2020-01-29 04:31:44
文章摘自: http://blog.jobbole.com/88208/ 一、奇异值与特征值基础知识: 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法。两者有着很紧密的关系,我在接下来会谈到,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧: 1) 特征值: 如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式: 这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式: 其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵: 它其实对应的线性变换是下面的形式: 因为这个矩阵M乘以一个向量(x,y)的结果是: 上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子: 它所描述的变换是下面的样子: 这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最 主要的

二维数组右上左下遍历

孤人 提交于 2020-01-29 02:49:53
描述 给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。 输入 输入的第一行上有两个整数,依次为row和col。 余下有row行,每行包含col个整数,构成一个二维整数数组。 (注:输入的row和col保证0 < row < 100, 0 < col < 100) 输出 按遍历顺序输出每个整数。每个整数占一行。 样例输入 3 4 1 2 4 7 3 5 8 10 6 9 11 12 样例输出 1 2 3 4 5 6 7 8 9 10 11 12 # include <stdio.h> int sz [ 120 ] [ 120 ] ; int main ( ) { int r , c , i , j ; scanf ( "%d %d" , & r , & c ) ; for ( i = 0 ; i < r ; i ++ ) { for ( j = 0 ; j < c ; j ++ ) { scanf ( "%d" , & sz [ i ] [ j ] ) ; } } for ( j = 0 ; j < c ; j ++ ) { int x = 0 , y = j ; while ( y >= 0 && x < r ) printf ( "%d\n" , sz [ x ++ ] [ y -- ] ) ; }

浅谈矩阵快速幂

被刻印的时光 ゝ 提交于 2020-01-29 00:03:44
矩阵快速幂 一. 简介 首先,矩阵快速幂是从快速幂里延伸出的算法,需要快速幂以及线性代数的知识。快速幂是利用二进制的有关性质快速计算出 x n ,矩阵快速幂则是通过将递推式化成一个矩阵,求解某个递推结果的过程变成求解一个矩阵的 n 次幂的过程,从而能用快速幂加快递推式的求解。 举个例子,我们来用斐波那契数列来解释一下矩阵快速幂的具体流程。大家都知道递推式为 F(n) = F(n-1)+F(n-2) 。这个式子十分浅显易懂,但是用来及求解较大的项时就会变得非常慢,因此我们可以考虑用矩阵快速幂来优化一下计算过程。在一般情况下,我们要通过递推式获得一个矩阵之间的递推关系,形如 T*A(n-1) = A(n)( 其中 T , A(n-1) , A(n) 均为矩阵 ) 。 对于 F(n) ,我们可以得到一个矩阵之间的递推关系就是 其中, 要注意的是,为了方便运算,我们构造的矩阵都是方阵,在这里 A n 其实也是一个 2*2的方阵,但 我们只关心 A n 的左边,所以就没有写出A n 的右边。很明显,上面给出的等式是成立的,接下来,如果我们要求 F(n),就可以先求出A(n) = T n-2 *A(1), A(1)是左边为两个1的2*2矩阵,此时F(n)就是A(n)左上角的值。这样,我们就把一个递推式的计算过程优化,然后运用矩阵快速幂进行极快的求解。 矩阵快速幂的难点就在于矩阵的构造。 下面