⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 densematrix.as

📁 用于flash/flex的 as3的 2D图形图像图表的动态生成
💻 AS
字号:
package flare.util.math
{
	/**
	 * A matrix of numbers implemented using an array of values.
	 */
	public class DenseMatrix implements IMatrix
	{
		private var _r:int;
		private var _c:int;
		private var _v:Array;
		
		/** The underlying array of values */
		public function get values():Array { return _v; }
		/** @inheritDoc */
		public function get rows():int { return _r; }
		/** @inheritDoc */
		public function get cols():int { return _c; }
		/** @inheritDoc */
		public function get nnz():int {
			var nz:int = 0;
			for (var i:uint=0; i<_v.length; ++i) {
				if (_v[i] != 0) ++nz;
			}
			return nz;
		}
		/** @inheritDoc */
		public function get sum():Number {
			var sum:Number = 0;
			for (var i:uint=0; i<_v.length; ++i)
				sum += _v[i];
			return sum;
		}
		/** @inheritDoc */
		public function get sumsq():Number {
			var sumsq:Number = 0;
			for (var i:uint=0; i<_v.length; ++i)
				sumsq += _v[i]*_v[i];
			return sumsq;
		}
		
		// --------------------------------------------------------------------
		
		/**
		 * Creates a new DenseMatrix with the given size. 
		 * @param rows the number of rows
		 * @param cols the number of columns
		 */
		public function DenseMatrix(rows:int, cols:int) {
			init(rows, cols);
		}
		
		/** @inheritDoc */
		public function clone():IMatrix {
			var m:DenseMatrix = new DenseMatrix(_r, _c);
			var v:Array = m.values;
			for (var i:uint=0; i<_v.length; ++i) {
				v[i] = _v[i];
			}
			return m;
		}
		
		/** @inheritDoc */
		public function like(rows:int, cols:int):IMatrix {
			return new DenseMatrix(rows, cols);
		}
		
		/** @inheritDoc */
		public function init(rows:int, cols:int):void {
			_r = rows;
			_c = cols;
			_v = new Array(_r * _c);
			for (var i:uint=0; i<_v.length; ++i) _v[i]=0;
		}
		
		/** @inheritDoc */
		public function get(i:int, j:int):Number {
			return _v[i*_c + j];
		}
		
		/** @inheritDoc */
		public function set(i:int, j:int, v:Number):Number {
			_v[i*_c + j] = v;
			return v;
		}
		
		/** @inheritDoc */
		public function scale(s:Number):void {
			for (var i:uint=0; i<_v.length; ++i) _v[i] *= s;
		}
		
		/** @inheritDoc */
		public function multiply(b:IMatrix):IMatrix {
			if (cols != b.rows)
				throw new Error("Incompatible matrix dimensions.");
			var z:IMatrix = like(rows, b.cols);
			for (var i:uint=0; i<z.rows; ++i) {
				for (var j:uint=0; j<z.cols; ++j) {
					var v:Number = 0;
					for (var k:uint=0; k<cols; ++k)
						v += get(i,k) * b.get(k,j);
					z.set(i, j, v);
				}
			}
			return z;
		}
		
		/** @inheritDoc */
		public function visitNonZero(f:Function):void {
			var k0:int, k:int;
			for (var i:uint=0; i<_r; ++i) {
				k0 = i*_c;
				for (var j:uint=0; j<_c; ++j) {
					k = k0 + j;
					if (_v[k] != 0) _v[k] = f(i, j, _v[k]);
				}
			}
		}
		
		/** @inheritDoc */
		public function visit(f:Function):void {
			var k0:int, k:int;
			for (var i:uint=0; i<_r; ++i) {
				k0 = i*_c;
				for (var j:uint=0; j<_c; ++j) {
					k = k0 + j;
					_v[k] = f(i, j, _v[k]);
				}
			}
		}

	} // end of class DenseMatrix
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -