矩阵

python---numpy

假如想象 提交于 2020-01-03 02:26:57
一 概述   NumPy 是一个 Python 包。 它代表 “Numeric Python”。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。Numeric,即 NumPy 的前身,是由 Jim Hugunin 开发的。 他也开发了另一个包 Numarray ,它拥有一些额外的功能。 2005年,Travis Oliphant 通过将 Numarray 的功能集成到 Numeric 包中来创建 NumPy 包。 这个开源项目有很多贡献者。 NumPy是 高性能科学计算和数据分析 的基础包。部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组。 用于对整组数据进行快速运算的标准数学函数(无需编写循环)。 用于读写磁盘数据的工具以及用于操作内存映射文件的工具。 线性代数、随机数生成以及傅里叶变换功能。 用于集成C、C++、Fortran等语言编写的代码的工具。 二 创建矩阵   NumPy 中定义的最重要的对象是称为 ndarray 的 N 维数组类型。 它描述相同类型的元素集合。 可以使用基于零的索引访问集合中的项目。 ndarray 中的每个元素在内存中使用相同大小的块。 ndarray 中的每个元素是数据类型对象的对象(称为 dtype )。从 ndarray 对象提取的任何元素(通过切片)由一个数组标量类型的 Python

numpy库常用基本操作

此生再无相见时 提交于 2020-01-03 02:26:23
NumPy数组的维数称为秩(rank),一维数组的秩为1,二维数组的秩为2,以此类推。在NumPy中,每一个线性的数组称为是一个轴(axes),秩其实是描述轴的数量。比如说,二维数组相当于是一个一维数组,而这个一维数组中每个元素又是一个一维数组。所以这个一维数组就是NumPy中的轴(axes),而轴的数量——秩,就是数组的维数。 1、创建矩阵 Numpy库中的矩阵模块为ndarray对象,有很多属性:T,data, dtype,flags,flat,imag,real,size, itemsize,nbytes,ndim,shape,strides,ctypes,base等等。 1.1采用ndarray对象 import numpy as np #引入numpy库 #创建一维的narray对象 a = np.array([1,2,3,4,5]) #创建二维的narray对象 a2 = np.array([[1,2,3,4,5],[6,7,8,9,10]]) #创建多维对象以其类推 1.2通过函数创建矩阵 1.2.1 arange 1 import numpy as np 2 3 a = np.arange(10) # 默认从0开始到10(不包括10),步长为1 4 print(a) # 返回 [0 1 2 3 4 5 6 7 8 9] 5 6 a1 = np.arange(5,10

numpy模块介绍

回眸只為那壹抹淺笑 提交于 2020-01-03 02:25:26
import numpy as np np.array([1,2,3]) array([1, 2, 3]) np.array([[1,2,3],[4,5,6]]) array([[1, 2, 3], [4, 5, 6]]) arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) arr array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) 把它给看成一个矩阵,或者看成一个ndarray数组的话,我们去获取他的形状. arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) arr.shape (4, 3) arr.shape[0] print(arr.shape[0]) 20 arr.shape[1] 3 切割矩阵 arr = np.array([1,2,3]) arr arr[:] array([1, 2, 3]) arr = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]]) arr array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [10, 11, 12]]) arr[:,:] array([[ 1, 2, 3], [ 4, 5, 6], [ 7, 8, 9], [10, 11, 12]])

简单的PHP二维数组去重方法

萝らか妹 提交于 2020-01-03 02:21:04
简单的PHP二维数组去重方法: public function a_array_unique($array){  $out = array(); foreach ($array as $key=>$value) {   if (!in_array($value, $out)){   $out[$key] = $value;   } }   $out = array_values($out);   return $out; } 根据某个字段重复(name) foreach(array as $key=>$v){   if(isset($out[$v['name']])){     unset($array[$key]);   }else{     $out[$v['name']] = $v;   } } 搞定! 作者  --PDO 来源: https://www.cnblogs.com/pdos/p/9958728.html

php 二维数组去重

别说谁变了你拦得住时间么 提交于 2020-01-03 02:20:54
function remove_duplicate($array){   $result=array();   foreach ($array as $key => $value) {     $has = false;     foreach($result as $val){       if($val['id']==$value['id']){       $has = true;       break;     }   } if(!$has)   $result[]=$value; } return $result; } 来源: https://www.cnblogs.com/lijiageng/p/6532589.html

#100. 矩阵乘法

天涯浪子 提交于 2020-01-03 01:57:36
题面 代码 没什么好多讲的, \(OI\) 中基本记住定义就行了,矩阵一般也是正方形。 图片摘自百度: 矩阵快速幂(类比数的快速幂)可以优化一些递推的问题: \(0.\) 特判最小的几项? \(1.\) 确定矩阵的大小,转移中用到了什么东西,尽可能小一些,优化常数。然后用矩阵表示出初始状态或直接是单位矩阵。 \(2.\) 构造转移矩阵,大小相同,使得两个矩阵相乘后能转移到后一个状态且不影响相对性。 \(O(npm)\) 来源: https://www.cnblogs.com/May-2nd/p/11681150.html

day07:二维数组_面向对象

守給你的承諾、 提交于 2020-01-02 23:57:28
今日学习内容罗列: 一、二维数组 1、二维数组的概念: 二维数组的元素就是一个一维数组,以及一维数组对应的长度 2、定义格式: 1)动态初始化 格式1: 数据类型[][] 数组名称 = new 数据类型[m][n] ; (推荐第一种) 数据类型 数组名称[][] = new 数据类型[m][n] ; 举例: int[][] arr = new int[3][2] ; 解释: 等号左边: int:表示一个int类型 [][]:表示定义二维数组 arr :数组名称 等号右边: new :在堆内存中创建对象 int :创建int类型数组 [3] :表示当前二维数组中有3个一维数组 [2] :这三个一维数组中每一个都有2个元素 格式2: 数据类型[][] 数组名称 =new 数据类型[m][] ; 举例: int[][] arr = new int[3][] ; 当前二维数组中有m个一维数组,但是没有给定每一个一维数组的长度,长度可以动态给定! 2)静态初始化 基本格式: 数据类型[][] 数组名称 = new 数据类型[][]{{元素1,元素2..},{元素1,元素2...},{元素1,元素2...}...} ; 简写格式 数据类型[][] 数组名称 = {{元素1,元素2..},{元素1,元素2...},{元素1,元素2...}...} ; 举例: int[][] arr = {{1

java基础(七)

↘锁芯ラ 提交于 2020-01-02 20:31:24
数组 1)常见的异常: Throwable 类 : error: 严重错误,无法直接解决 (内存溢出),可以通过第三方的技术避免! Exception:表示程序异常了 RuntimeException:运行时期异常;不是RunTimeException异常,编译时期异常 ArrayIndexOutOfBoundsException:数组角标越界异常 (运行时期异常);出现这个异常的原因:访问了数组中的不存在的角标 NullPointerException:也属于运行时期异常 出现异常的原因:对象都不存在了或者为null,还有通过对象访问数组中的元素值,肯定出现问题了 二维数组 二维数组的概念:二维数组的元素就是一个一维数组,以及一维数组对应的长度 定义格式1:动态初始化 数据类型[][] 数组名称 = new 数据类型[m][n] ; (推荐第一种) 数据类型 数组名称[][] = new 数据类型[m][n] ; 定义格式2: 数据类型[][] 数组名称 =new 数据类型[m][] ; 定义格式3 :给定具体的元素内容,静态初始化 基本格式 数据类型[][] 数组名称 = new 数据类型[][]{{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}…} ; 简写格式 数据类型[][] 数组名称 = {{元素1,元素2…},{元素1,元素2…},{元素1,元素2…}

最优矩阵连乘问题 区间DP

我的未来我决定 提交于 2020-01-02 02:53:08
最优矩阵连乘积 Accepted: 10 Total Submit: 18 Time Limit: 1000ms Memony Limit: 32768KB Description 在科学计算中经常要计算矩阵的乘积。矩阵A和B可乘的条件是矩阵A的列数等于矩阵B的行数。若A是一个p×q的矩阵,B是一个q×r的矩阵,则其乘积C=AB是一个p×r的矩阵。其标准计算公式为: 由该公式知计算C=AB总共需要pqr次的数乘。 为了说明在计算矩阵连乘积时加括号方式对整个计算量的影响,我们来看一个计算3个矩阵{A1,A2,A3}的连乘积的例子。设这3个矩阵的维数分别为10×100,100×5和5×50。若按第一种加括号方式((A1A2)A3)来计算,总共需要10×100×5+10×5×50=7500次的数乘。若按第二种加括号方式(A1(A2A3))来计算,则需要的数乘次数为100×5×50+10×100×50=75000。第二种加括号方式的计算量是第一种加括号方式的计算量的10倍。由此可见,在计算矩阵连乘积时,加括号方式,即计算次序对计算量有很大影响。 于是,人们自然会提出矩阵连乘积的最优计算次序问题,即对于给定的相继n个矩阵{A1,A2,…,An}(其中Ai的维数为pi-1×pi ,i=1,2,…,n),如何确定计算矩阵连乘积A1A2…An的一个计算次序(完全加括号方式)

矩阵连乘(有关区间dp)

我们两清 提交于 2020-01-02 02:51:01
  将每一个两两相乘的最优先记录好 先计算出小的区间的最优,于是可以推出大的区间的最优。以下是求解的顺序,先把1-2、2-3等等相差为1的计算出答案, 然后求1-3、 2-4等等相差为2的最优答案,以此类推,右上角的格子为问题的解。 2-5(即:2、 3、 4、 5)这个区间,可由2-3与3-5构成,还能由2-4与4-5构成,有下图。 看看实例. 算法设计例题:矩阵连乘(DP) Time Limit: 1000/500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1618 Accepted Submission(s): 545 Description 给定 n 个矩阵{ A 1 , A 2 ,…, A n },保证 A i 与 A i+1 是可乘的, i = 1,2,…, n -1。考察这 n 个矩阵的连乘积 A 1 A 2 … A n 。由于矩阵乘法满足结合律,故计算矩阵的连乘积可以有许多不同的计算次序。这种计算次序可以用加括号的方式来确定。现要求设计一个高效的算法,对给定的 n 个矩阵确定一个计算次序使得总的乘法次数最少,并输出该最优值。 Input 输入的第一行是单独一个整数T,表示案例的数目。每个案例的第一行是单独一个 n ( 1 ≤ n ≤ 50 )