分享
 
 
 

Blitz++ 矩阵相乘(张量运算) 示例

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

//整理 by RobinKin

//Blitz++ 张量计算的示例

/*****************************************************************************

* matmult.cpp Blitz++ tensor notation example

*****************************************************************************

* This example illustrates the tensor-like notation provided by Blitz++.

*/

#include <blitz/array.h>

#include <iostream>

using namespace blitz;

int main()

{

// Create two 4x4 arrays. We want them to look like matrices, so

// we'll make the valid index range 1..4 (rather than 0..3 which is

// the default).

Range r(1,4);

Array<float,2> A(r,r), B(r,r);

// The first will be a Hilbert matrix:

//

// a = 1

// ij -----

// i+j-1

//

// Blitz++ provides a set of types { firstIndex, secondIndex, ... }

// which act as placeholders for indices. These can be used directly

// in expressions. For example, we can fill out the A matrix like this:

firstIndex i; // Placeholder for the first index

secondIndex j; // Placeholder for the second index

A = 1.0 / (i+j-1);

cout << "A = " << A << endl;

// A = 4 x 4

// 1 0.5 0.333333 0.25

// 0.5 0.333333 0.25 0.2

// 0.333333 0.25 0.2 0.166667

// 0.25 0.2 0.166667 0.142857

// Now the A matrix has each element equal to a_ij = 1/(i+j-1).

// The matrix B will be the permutation matrix

//

// [ 0 0 0 1 ]

// [ 0 0 1 0 ]

// [ 0 1 0 0 ]

// [ 1 0 0 0 ]

//

// Here are two ways of filling out B:

B = (i == (5-j)); // Using an equation -- a bit cryptic

cout << "B = " << B << endl;

// B = 4 x 4

// 0 0 0 1

// 0 0 1 0

// 0 1 0 0

// 1 0 0 0

B = 0, 0, 0, 1, // Using an initializer list

0, 0, 1, 0,

0, 1, 0, 0,

1, 0, 0, 0;

cout << "B = " << B << endl;

// Now some examples of tensor-like notation.

Array<float,3> C(r,r,r); // A three-dimensional array: 1..4, 1..4, 1..4

thirdIndex k; // Placeholder for the third index

// This expression will set

//

// c = a * b

// ijk ik kj

// C = A(i,k) * B(k,j);

cout << "C = " << C << endl;

// In real tensor notation, the repeated k index would imply a

// contraction (or summation) along k. In Blitz++, you must explicitly

// indicate contractions using the sum(expr, index) function:

Array<float,2> D(r,r);

D = sum(A(i,k) * B(k,j), k);//指标收缩, 计算矩阵积

// The above expression computes the matrix product of A and B.

cout << "D = " << D << endl;

// D = 4 x 4

// 0.25 0.333333 0.5 1

// 0.2 0.25 0.333333 0.5

// 0.166667 0.2 0.25 0.333333

// 0.142857 0.166667 0.2 0.25

// Indices like i,j,k can be used in any order in an expression.

// For example, the following computes a kronecker product of A and B,

// but permutes the indices along the way:

Array<float,4> E(r,r,r,r); // A four-dimensional array

fourthIndex l; // Placeholder for the fourth index

E = A(l,j) * B(k,i);//指标轮换

//cout << "E = " << E << endl;

// Now let's fill out a two-dimensional array with a radially symmetric

// decaying sinusoid.

int N = 64; // Size of array: N x N

Array<float,2> F(N,N);

float midpoint = (N-1)/2.;

int cycles = 3;

float omega = 2.0 * M_PI * cycles / double(N);

float tau = - 10.0 / N;

F = cos(omega * sqrt(pow2(i-midpoint) + pow2(j-midpoint)))

* exp(tau * sqrt(pow2(i-midpoint) + pow2(j-midpoint)));

//cout << "F = " << F << endl;

return 0;

}

//输出

A = 4 x 4

[ 1 0.5 0.333333 0.25

0.5 0.333333 0.25 0.2

0.333333 0.25 0.2 0.166667

0.25 0.2 0.166667 0.142857 ]

B = 4 x 4

[ 0 0 0 1

0 0 1 0

0 1 0 0

1 0 0 0 ]

B = 4 x 4

[ 0 0 0 1

0 0 1 0

0 1 0 0

1 0 0 0 ]

D = 4 x 4

[ 0.25 0.333333 0.5 1

0.2 0.25 0.333333 0.5

0.166667 0.2 0.25 0.333333

0.142857 0.166667 0.2 0.25 ]

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有