大文本矩阵的转置

得到一个近1G的文本矩阵,想来个行列转换

刚开始很甜地觉得用个小包就能搞定

手头正在用numpy 于是来loadtxt

于是。。。卡了。。。本子果然是战斗力只有5的渣渣


接着随手写了个python脚本

想着不就是内存之类的不够用吗 我一行行地读不行吗!

def revefile(filename):
  f=open(filename,'r')
  # Although I plan to use numpy,but I found it's...too big...

  os.mkdir('revetmp')
  print 'begin read file...'
  f=open('filname','r')
  count=0
  for s in f:
    count+=1
    s=s.replace('\t','\n').replace('\r','')
    w=open('revetmp/t_'+str(count)+'.txt','wb+')
    w.writelines(s)
    w.close()
    if(count%10000==0):print count
  print count
  f.close()

  print 'try to paste files....'
  os.system('paste -d\t revetmp/* > reversefile.txt')
  os.system('rm -rf revetmp')
答案是 不行啊

280多万行 缓慢地爬了

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的 C# 7.3 窗体程序,实现了矩阵操作的要求: ```csharp using System; using System.Linq; using System.Windows.Forms; namespace MatrixOperation { public partial class MainForm : Form { private int[,] matrixA; private int[,] matrixB; private int[,] matrixC; public MainForm() { InitializeComponent(); } // 随机生成方阵 private void GenerateMatrixButton_Click(object sender, EventArgs e) { int n = (int)MatrixSizeNumericUpDown.Value; var rand = new Random(); matrixA = new int[n, n]; matrixB = new int[n, n]; matrixC = new int[n, n]; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixA[i, j] = rand.Next(10); matrixB[i, j] = rand.Next(10); } } DisplayMatrix(matrixA, MatrixATextBox); DisplayMatrix(matrixB, MatrixBTextBox); } // 显示矩阵 private void DisplayMatrix(int[,] matrix, TextBox textBox) { int n = matrix.GetLength(0); textBox.Text = ""; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { textBox.Text += matrix[i, j].ToString() + " "; } textBox.Text += Environment.NewLine; } } // 矩阵相加 private void AddMatrixButton_Click(object sender, EventArgs e) { int n = (int)MatrixSizeNumericUpDown.Value; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixC[i, j] = matrixA[i, j] + matrixB[i, j]; } } DisplayMatrix(matrixC, MatrixCTextBox); } // 矩阵相减 private void SubtractMatrixButton_Click(object sender, EventArgs e) { int n = (int)MatrixSizeNumericUpDown.Value; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixC[i, j] = matrixA[i, j] - matrixB[i, j]; } } DisplayMatrix(matrixC, MatrixCTextBox); } // 矩阵相乘 private void MultiplyMatrixButton_Click(object sender, EventArgs e) { int n = (int)MatrixSizeNumericUpDown.Value; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixC[i, j] = 0; for (int k = 0; k < n; k++) { matrixC[i, j] += matrixA[i, k] * matrixB[k, j]; } } } DisplayMatrix(matrixC, MatrixCTextBox); } // 矩阵转置 private void TransposeMatrixButton_Click(object sender, EventArgs e) { int n = (int)MatrixSizeNumericUpDown.Value; for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) { matrixC[i, j] = matrixA[j, i]; } } DisplayMatrix(matrixC, MatrixCTextBox); } } } ``` 需要在窗体上添加以下控件: - Label:MatrixSizeLabel,文本为“矩阵维数:” - NumericUpDown:MatrixSizeNumericUpDown,最小值为 1,最大值为 10 - Button:GenerateMatrixButton,文本为“生成随机矩阵” - TextBox:MatrixATextBox,文本框中的多行属性为 true - TextBox:MatrixBTextBox,文本框中的多行属性为 true - Button:AddMatrixButton,文本为“矩阵相加” - Button:SubtractMatrixButton,文本为“矩阵相减” - Button:MultiplyMatrixButton,文本为“矩阵相乘” - Button:TransposeMatrixButton,文本为“矩阵转置” - TextBox:MatrixCTextBox,文本框中的多行属性为 true 在窗体的构造函数中,初始化了三个二维数组 matrixA、matrixB 和 matrixC,用于存储两个矩阵和一个结果矩阵。在 GenerateMatrixButton_Click 事件处理程序中,使用 Random 类生成了两个随机矩阵 matrixA 和 matrixB,并通过 DisplayMatrix 方法将它们显示在 MatrixATextBox 和 MatrixBTextBox 中。 在 AddMatrixButton_Click、SubtractMatrixButton_Click 和 MultiplyMatrixButton_Click 事件处理程序中,分别实现了矩阵相加、相减和相乘的操作,并将结果显示在 MatrixCTextBox 中。 在 TransposeMatrixButton_Click 事件处理程序中,实现了矩阵转置的操作,并将结果显示在 MatrixCTextBox 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值