Multiplication of two matrices


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Multiplication of two matrices
# 8  
Old 02-22-2016
How about being able to select both the column to be printed in field 1 of the output, and the suffix of the fields to use for the calculations? Try
Code:
awk '
FNR == NR       {T[$1 SFX] = $3
                 next   
                }
                {printf "%s", $COL
                }
FNR == 1        {for (i=COL+1; i<=NF; i++)      {if ($i in T)   {C[++CNT] = i
                                                                 F[CNT] = T[$i]
                                                                 printf " %s", $i
                                                                }
                                                }
                 printf RS
                 next
                }
                {for (i=1; i<=CNT; i++) printf "%s%s", FS, $C[i] * F[i]
                 print ""
                }
' COL=2 SFX="_A" file2 file1
ID2 MI1_A MI2_A
1 0.4 -0.4
2 0.8 0

or
Code:
MI1_A MI1_H MI2_H
1 0 -0.2
2 0.4 -0.2

with COL=6 SFX="_H"
This User Gave Thanks to RudiC For This Post:
# 9  
Old 02-22-2016
@Don Cragun
In #Post5 i've tried to explain the files and what output i'm looking for. It is a bit confusing though, ill try to explain here
#File1:Headings from column6 onwards contain either "_A" or "_H" in the end. I only want to use the columns with "_A" for the desired multiplication. ID2 is the records id here and all other columns before column6 are not important.
#File2: Record id is the same as column id from column 6 onwards in File1 except for both "_A" and "_H".
Hope that helps to better understand the problem!

---------- Post updated at 09:06 AM ---------- Previous update was at 08:55 AM ----------

@RudiC: There is no output at all. Could you please explain your code a bit?

---------- Post updated at 09:08 AM ---------- Previous update was at 09:06 AM ----------

@RudiC: There is no output at all. Could you please explain your code a bit?

Last edited by Akang; 02-22-2016 at 08:05 PM..
# 10  
Old 02-23-2016
There is, as you can see, in the three lines under the code.

The FNR == NR part collects the factors from file2 into an array T, indexed by the field1 value suffixed by the parameter variable SFX.

Then, for every line in file1, the desired column is printed, identified by parameter variable COL.
For file1's first line, the to be selected columns are collected in array C, and the factors fromfile2 in array F, both indexed by a counter CNT. Also, the header fields are printed.

Then, for every input line, the desired fields, eventually multiplied by the respective factors, are printed.
# 11  
Old 02-24-2016
I dont' get any output when I run it :-(

---------- Post updated at 10:04 AM ---------- Previous update was at 09:56 AM ----------

I dont' get any output at all :-(

---------- Post updated at 04:59 PM ---------- Previous update was at 10:04 AM ----------

@RudiC: I think i am executing it wrong. Could you tell me how do i run this program?TIA!

---------- Post updated at 05:11 PM ---------- Previous update was at 04:59 PM ----------

@RudiC: I think i am executing it wrong. Could you tell me how do i run this program?TIA!
# 12  
Old 02-24-2016
Both code snippets provided work on the two files presented as samples in post#1 if run as shown. I don't think there are any version specific features used, so I can't imagine the scripts to fail unless
- you didn't run them as indicated (using the correct actual filenames!)
- your input files differ from the ones posted
# 13  
Old 02-24-2016
I did use the actual file names that i have. I saved this code to a file and saved it as code.awk, then in the shell promp i type :
Code:
awk code file2 file1 > output

. Is it the right way?
Moderator's Comments:
Mod Comment Please use CODE tags as required by forum rules.

I have guessed at what you typed into your shell, but with your punctuation I have no confidence that I have correctly guessed at how your post should have been formatted.

Last edited by Don Cragun; 02-24-2016 at 05:55 AM.. Reason: Add CODE and ICODE tags.
# 14  
Old 02-24-2016
Try copying the code from a post and paste it to the command line.
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Homework & Coursework Questions

Multiplication Table in UNIX

How can I produce this kind of output? Enter a number: 3 MULTIPLICATION TABLE: 0 1 2 3 1 1 2 3 2 2 4 6 3 3 6 9 When you enter a number, it should show you the corresponding multiplication table. Plus we need to use for loops that I do not actually know. Thanks in advance! Here is my... (2 Replies)
Discussion started by: larkha
2 Replies

2. UNIX for Beginners Questions & Answers

Matrix multiplication

I have two files. Row id in File1 matches the column id in file2 (starting from column7 )except the last 2 characters. File1 has 50 rows and File 2 has 56 columns. If the id matches I want to multiply the value in column3 of File1 to the entire column in File2. and in the final output print only... (11 Replies)
Discussion started by: Akang
11 Replies

3. UNIX for Dummies Questions & Answers

Merge matrices

Hello all, I have square matrices that look like the following, I want to merge these matrices together, and add the file names as headers. This is a simple example with two variables, actually I have ~1500 variables and 10 files. The order of variables in the matrices are consistent. Please... (2 Replies)
Discussion started by: senhia83
2 Replies

4. Shell Programming and Scripting

Multiplication of array elements

Hi, I can't find out how to create correct code to get multiplication of each elements of array. Let's say I enter array into command line (2 3 4 5 6 8) and i need output 2*3*4*5*6*8=5760. I tried this one, but answer is 0. for i in $@; do mult=$((mult*i))done echo "mult: " $mult ... (4 Replies)
Discussion started by: rimasbimas
4 Replies

5. UNIX for Advanced & Expert Users

Vector base Cosine Similarity for two Matrices -- R in UNIX

Dear All, I am facing a problem and I would be Thankful if you can help Hope this is the right place to ask this question I have two matrices of (row=10, col=3) and I want to get the cosine similarity between two lines (vectors) of each file --> the result should be (10,1) of cosine measures I... (10 Replies)
Discussion started by: A-V
10 Replies

6. Programming

C multiplication with GCC

Hi all, newbie here. Does anyone know if it is possible to use GCC or Clang to multiply two unsigned numbers and have it use for intel instructions, the mull instruction or an imul. I can't figure how to word this to accomplish this task: (int)(((unsigned long long)result * (unsigned)2290649225)... (4 Replies)
Discussion started by: pheonix
4 Replies

7. UNIX for Dummies Questions & Answers

Multiplication using bc in a for loop

Hi, I would like to carry out a multiplication in a for loop but some how I get always zero. The result of the multiplication must be assigned to the variable x. Here is teh code for (( i=1;i<=15;i++)); do x=$( printf "%s\n " 'scale = 10; i*5.0*335.0*3.0/1000.0' | bc) echo $x $i... (5 Replies)
Discussion started by: f_o_555
5 Replies

8. UNIX for Dummies Questions & Answers

Exact Multiplication

Hi, I am writing a script in Bourne shell #!/bin/sh used=`quota -v | tail -1 | awk '{print $2}'` total=`quota -v | tail -1 | awk '{print $3}'` echo "$used" echo "$total" perc=`expr ${used} / ${total} * 100 | bc` echo "$perc" I want to get a percentage of quota used to total limit I... (5 Replies)
Discussion started by: desai.rishabh
5 Replies

9. Shell Programming and Scripting

using awk multiplication

Suppose i have a file A 1*2*3*4 2*4*4*22 and second file B 2*3*4*5 4*4*6*7 By multiplying file A by file B that is file A by first column in file B respectively output shud be 2*6*12*20 8*16*24*154 my code is =$1 next } {for (f=1;f<=NF;f++) (2 Replies)
Discussion started by: cdfd123
2 Replies

10. Linux

Multiplication with Fractions

Hello there, how do i multiply a fraction and a whole number? Example 20% of 50,000. I had gotten 0.2 using the following: chk=echo 20 100 | awk `{print $1/$2}` echo $chk $chk \* 50000 displays the error: non-numeric expression. (1 Reply)
Discussion started by: alby
1 Replies
Login or Register to Ask a Question