6
$\begingroup$

If I have two list such as:

list1 = {{40., 7.50551*10^-10}, {40.,7.50557*10^-10}, {40.,7.50566*10^-10},
         {40.0001, 7.50578*10^-10}, {40.0001, 7.50591*10^-10},{40.0001, 7.50607*10^-10},
         {40.0002, 7.50625*10^-10}, {40.0002, 7.50645*10^-10},{40.0003, 7.50668*10^-10},
         {40.0003, 7.50692*10^-10}};

list2 = {{40., 0.0712996}, {40., 0.0712996}, {40.,0.0712996}, {40.0001, 0.0712996},
         {40.0001, 0.0712996}, {40.0001, 0.0712996}, {40.0002, 0.0712996},
         {40.0002, 0.0712996}, {40.0003, 0.0712996}, {40.0003, 0.0712996}};

where the first element of both lists is the same. How can I multiply each second element of each list by each other while keeping the first element intact to obtain a list with the same elements of the first position and the multiplication of each element of the second position?

$\endgroup$

4 Answers 4

7
$\begingroup$

Here is one way:

{list1[[All, 1]], (list1 list2)[[All, 2]]} // Transpose
$\endgroup$
1
  • $\begingroup$ Thank you! This works great ! $\endgroup$
    – John
    May 24, 2020 at 22:26
3
$\begingroup$

The same, but with Thread.

Thread[{list1[[All, 1]], list2[[All, 2]]*list1[[All, 2]]}]

Another way to get the product is

Table[list2[[i, 2]]*list1[[i, 2]], {i, 1, Length[list1]}]
$\endgroup$
3
$\begingroup$
list1 Inner[{#2,#1}&,list2,{0,1}, #2&]

In the example given by the OP (but not in the general case of the question title), all the second elements in list2 are also identical, and Dot may be used to 'multiply a matrix column by a factor', and get the same result:

list1.{{1,0},{0,list2[[1,2]]}}

And:

(list1 Inner[{#2,#1}&,list2,{0,1}, #2&])===(list1.{{1,0},{0,list2[[1,2]]}})

True

Yet another method is the following:

list1 ArrayFlatten[{{1, List/@list2[[All,2]]}}]

For this use of ArrayFlatten see this old SO answer by Janus

Original Answer

 list1 Inner[{1,#1}&,list2,{1,0}, #2&]
$\endgroup$
1
  • $\begingroup$ Correct. I had noticed that the first elements for both lists are the same, but had not noticed the second elements of list 2. I can only suppose that the OP is asking for a general example. $\endgroup$
    – Titus
    May 25, 2020 at 11:27
2
$\begingroup$

Here is my version:

MapThread[{#[[1]], #[[2]] #2[[2]]} &, {list1, list2}]
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.