栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

C++ 二维数组相乘 二级指针实现

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

C++ 二维数组相乘 二级指针实现

最近在用c++手搓神经网络,看了下网上的一些实现方法,都是基于索引实现的,给函数传入a[][10]或者(*a)[10],这种方法简洁明了,但是使用的时候,限制了数组第二维度的大小,如果要想重复使用还得用函数重载,所以自己整了个基于二级指针实现的方法。

#include 
using namespace std;

void mul_array_2d(float** a,int a_row,int a_col,float** b,int b_row,int b_col,float** result_array)
{

	if (a_col != b_row)
	{
		cout << "两个矩阵的大小不匹配,无法相乘" << endl;
	}
	else
	{
		for (int i = 0; i < a_row; i++)
		{
			for (int j = 0; j < b_col; j++)
			{
				for (int k = 0; k < a_col; k++)
				{
					//result_array[i][j] += a[i][k] * b[k][i];
					//a[i][j]=a[i*n+j]
					//result_array[i * a_row + j] += a[i * a_col + k] * b[k * b_col + i];
					*((float*)result_array + i * a_row + j) += *((float*)a + i * a_col + k) * *((float*)b + k * b_col + j);
				}
			}
		}
	}	
}


int main()
{
	float w[2][3] = {{1,2,3},{4,5,6}};
	float x[3][2] = { {1,2},{3,4},{5,6} };
	//cout << shape << endl;
	float wx[2][2] = { 0};


	mul_array_2d((float**)w,2,3, (float**)x,3,2, (float**)wx);
	

	for (int i = 0; i < 2; i++)
	{
		cout << endl;
		for (int j = 0; j < 2; j++)
		{
			cout << wx[i][j] << " ";
		}
	}
	
	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/934952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号