添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
爱搭讪的哑铃  ·  React | JsPlumb ...·  2 月前    · 
至今单身的小蝌蚪  ·  unistd.h·  7 月前    · 
爱旅游的荔枝  ·  SyntaxError: ...·  11 月前    · 

一 数据为int型

c语言从命令行输入文件,读入文件,统计行数,对保存文件内容的数组进行动态内存分配,并将文件内容保存到数组里面,将保存到数组的两组数据进行卷积,再将卷积结果保存到文件中,同时打印输出,输入数据为int型变量。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main(int argc,char* argv[])   //命令行传参,argc代表传入参数个数,argv表示传入的参数
	int i,j,k;
	int m=0,n=0;
	int count1=0,count2=0;  //统计文件中字符个数
	int sum_row1,sum_row2;  //统计文件中字符个数
	int flag1=0,flag2=0;  //用于暂时将文件内容保存
	FILE *fp;    //文件指针
	FILE *fp1; 
	FILE *fp2;
	FILE *fp3;
	FILE *fp4;
	int *a_in1;   //用于读文件中的数据
	int *a_in2;   //用于读文件中的数据
	int *b_in1;   //用于保存从文件中读入的数据
	int *b_in2;   //用于保存从文件中读入的数据
	int *c_in;   //用于保存卷积结果
	fp=fopen(argv[1],"r");   //打开文件,只读,argv[1]代表从命令行输入的文件名称,即运行.exe程序时输入的第二个参数
	fp1=fopen(argv[1],"r");   //再次打开文件,(第一次打开文件用于统计文件的行数,即数据的个数)用于将文件内容保存到指针数组里
	fp2=fopen(argv[2],"r");
	fp3=fopen(argv[2],"r");
	fp4=fopen("test1.txt","w");   //打开文件,只写,用于将数组内容重新保存到另一个文件中
	if(fp==NULL)    //打开文件失败
		printf("File cannot open! ");  
		//exit;  
		return 0;
	if(fp2==NULL)    //打开文件失败
		printf("File cannot open! ");  
		//exit;  
		return 0;
	 if(argc!=3)   //判断输入参数个数,如果不为2个就报错
        printf("参数个数错误");
        return -1;
	while(!feof(fp))  //读文件,直到文件末尾
		flag1 = fgetc(fp);  //将文件内容附给flag1
		if(flag1 == '\n')  //如果为\n表示到行尾,便进行计数
			count1++;  //统计文件行数
	sum_row1 = count1+1; //加上文件最后一行,即为文件总的行数
	printf("输入文件ain1.txt行数为:%d",sum_row1);  //统计文件行数,因为每行只有一个数,所以即统计文件中有多少个数
	printf("\n");
	while(!feof(fp2))  //读文件,直到文件末尾
		flag2 = fgetc(fp2);  //将文件内容附给flag2
		if(flag2 == '\n')  //如果为\n表示到行尾,便进行计数
			count2++;  //统计文件行数
	sum_row2 = count2+1; //加上文件最后一行,即为文件总的行数
	printf("输入文件ain2.txt行数为:%d",sum_row2);  //统计文件行数,因为每行只有一个数,所以即统计文件中有多少个数
	printf("\n");
	a_in1 = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	a_in2 = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	b_in1 = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	b_in2 = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	c_in = (int*)malloc(sizeof(int)*200);  //动态分配用于保存文件内容的指针数组长度,以免溢出
	if (!a_in1)   //动态内存分配失败
       printf("内存分配失败");
       return-1;
	if (!a_in2)   //动态内存分配失败
       printf("内存分配失败");
       return-1;
	if (!b_in1)  //动态内存分配失败
       printf("内存分配失败");
       return-1;
	if (!b_in2)  //动态内存分配失败
       printf("内存分配失败");
       return-1;
	for(i=0;i<sum_row1;i++)  //控制文件行数
		for (j=0;j<1;j++)   //控制文件列数
			fscanf(fp1,"%d",&a_in1[j]);  //将文件其中一行内容保存到指针数组中
			//printf("%d\n",a_in[j]);
			b_in1[m]=a_in1[j];    //将读到的每一行的数据都保存到b_in指针数组中
			m++;  //行数加一
	for(i=0;i<sum_row2;i++)  //控制文件行数
		for (j=0;j<1;j++)   //控制文件列数
			fscanf(fp3,"%d",&a_in2[j]);  //将文件其中一行内容保存到指针数组中
			b_in2[n]=a_in2[j];    //将读到的每一行的数据都保存到b_in指针数组中
			n++;  //行数加一
	for (i=0;i<sum_row1+sum_row2-1;i++)     //对输出序列进行初始化,赋值为0
		c_in[i]=0;
	for (j=0;j<sum_row1+sum_row2-1;j++)     //外循环控制输出序列
		for (k=0;k<sum_row2;k++)    //内循环控制卷积序列
			if ((j-k) >= 0 && (j-k) < sum_row1)   //卷积控制
				c_in[j] += b_in1[j-k]*b_in2[k];   //进行卷积
	printf("卷积结果为:\n");
	for (i=0;i<sum_row1+sum_row2-1;i++)  //循环打印保存到指针数组中的数据
		printf("%d\t",c_in[i]);  //打印
		fprintf(fp4,"%d\n",c_in[i]);  //将保存到数组的数据保存到test1.txt文件中
	fclose(fp);  //关闭文件,释放指向文件的指针
	fclose(fp1);  //关闭文件,释放指向文件的指针
	fclose(fp2);  //关闭文件,释放指向文件的指针
	fclose(fp3);  //关闭文件,释放指向文件的指针
	fclose(fp4);
	return 0;
	free(a_in1);  //释放指针
	free(a_in2);  //释放指针
	free(b_in1);  //释放指针
	free(b_in2);  //释放指针
	free(c_in);  //释放指针
	return 0;

运行截图:
在这里插入图片描述
可复制结果:

C:\Users\CL\Desktop\学习\C\conv\fprintf\conv1>tcc conv1.c
C:\Users\CL\Desktop\学习\C\conv\fprintf\conv1>conv1.exe ain1.txt ain2.txt
输入文件ain1.txt行数为:7
输入文件ain2.txt行数为:9
卷积结果为:
6       28      73      146     288     648     1123    1651    2257    3028    4055    3701    2946    2601    945

保存文件结果:
在这里插入图片描述

二 数据为double型

c语言从命令行输入文件,读入文件,统计行数,对保存文件内容的数组进行动态内存分配,并将文件内容保存到数组里面,将保存到数组的两组数据进行卷积,再将卷积结果保存到文件中,同时打印输出,输入数据为double型变量。

运行截图:
在这里插入图片描述
可复制结果:

C:\Users\CL\Desktop\学习\C\conv\fprintf\conv1>tcc conv2.c
C:\Users\CL\Desktop\学习\C\conv\fprintf\conv1>conv2.exe ain3.txt ain4.txt
输入文件ain3.txt行数为:4
输入文件ain4.txt行数为:6
卷积结果为:
8.580000        26.910000       72.350000       104.280000      92.140000       100.190000      124.400000      137.670000      64.680000

保存文件结果:
在这里插入图片描述
本文所有程序及文件下载:
链接:
https://pan.baidu.com/s/1-tsW7rtbhxFNtkqAE8RghQ
提取码:847b

一 数据为int型c语言从命令行输入文件,读入文件,统计行数,对保存文件内容的数组进行动态内存分配,并将文件内容保存到数组里面,将保存到数组的两组数据进行卷积,再将卷积结果保存到文件中,同时打印输出,输入数据为int型变量。程序#include&lt;stdio.h&gt;#include&lt;string.h&gt;#include&lt;stdlib.h&gt;#include&... 卷积层尺寸的计算原理 输入矩阵格式:四个维度,依次为:样本数、图像高度、图像宽度、图像通道数 输出矩阵格式:与输出矩阵的维度顺序和含义相同,但是后三个维度(图像高度、图像宽度、图像通道数)的尺寸发生变化。 权重矩阵(卷积核)格式:同样是四个... 上信号与系统后,做实验用Matlab做的卷积,一个函数搞定,但是写实验报告时需要用C语言实现,额,虽说原理不难,实现起来浪费了我好久时间 一、卷积公式 Y(n)=x(n)h(n)=∑x(i)h(n-i) 先用Matlab演示卷积,后面以这个为例。 a=[1,2,3,4] b=[1,2,3] conv(a,b) ans = 1 4 10 16 17 12 void arrprint(int arr){ printf("%d\n",arr);}void main(){ int arr = 123; arrprint(arr); printf("aiyou"); getchar();}运行结果:123aiyou 二、传递数组的时候,需要将数组的长度也传入进去,否则只能传递一个第一个值 void arrprint(int* arr,int len){ f 本文主要实现功能:用c语言编写程序,实现从命令行传参输入要读入的文件,并动态分配用于保存文件数据内容的数组内存,统计文件中字符的个数,并将文件内容打印输出。 注 (1)本文中统计字符个数的程序只针对字符之间以空格隔开,并且数据之间只能有一个空格,同时行首不能以空格开始,但对于行数,和每行有多少个数据无要求。 (2)对于数据,为字符,整型数字,字符串等都同样适用(对于字符串,空格与空格之间...
之前曾经使用过很多次c语言命令行参数了,但是总是每次使用的时候都不太确定,需要重新查资料,这次来个总结。c语言命令行参数非常简单,只需要一个简单的例子就可以说明: #include void main(int argc,char** argv) printf("%d\n",argc); printf("%s\n",argv[0]);
对序列数据进行卷积可以使用PyTorch的nn.Conv1d模块。假设我们的序列数据是一个batch_size为3,长度为10,特征维度为5的张量,以下是一个简单的示例代码: ```python import torch import torch.nn as nn # 输入数据,batch_size=3,长度为10,特征维度为5 input_data = torch.randn(3, 5, 10) # 卷积层,输入通道数为5,输出通道数为10,卷积核大小为3 conv = nn.Conv1d(in_channels=5, out_channels=10, kernel_size=3) # 前向传播 output = conv(input_data) # 输出结果大小 print(output.size()) 在上面的示例中,我们创建了一个1维卷积层,输入通道数为5,输出通道数为10,卷积核大小为3。然后我们将一个大小为3x5x10的张量输入卷积层中,通过前向传播得到了输出结果。输出结果的大小为3x10x8,其中8是由于卷积核大小为3导致的缩小。