1

So, I have a list of numbers

weird_list = [800153196,
             946067665,
             827629917,
             868941741,
             875745873,
             926109150,
             1353347195,
             1003235074,
             1053666891,
             1442194993,
             1924716858,
             1060724069,
             1182240731,
             1646547575,
             1215762661,
             1520107722,
             1512568609,
             1534064291,
             1549459216,
             1773697582,
             1853820087,
             1696910852,
             1563415785,
             1692314635,
             1627783113]

My goal is to obtain a 2d np.array of sum of each pair of this list.

Example:

weird_list = [1, 2, 3]
resulting_array = [[0, 1, 2],
                   [1, 2, 3],
                   [2, 3, 4]]

I wrote this function which works just fine for smaller numbers, but not necessary, because I tested on arrays with bigger numbers. The problem for this array it's that I am obtaining somehow negative numbers.

def array_sum(i_list):
    i_array = np.array(i_list) # converts list to np.array
    i_array_rs1 = i_array.reshape(1, -1) 
    i_array_rs2 = i_array.reshape(-1, 1)
    i_array_rs_SUM = i_array_rs1 + i_array_rs2
    print(i_array_rs_SUM) # prints the sum of reshaped arrays, which doesn't work for my input list

I also wrote tried for some examples with lists of smaller/bigger numbers

low_list = [0, 1, 2, 3]
ex_list = []
weird_list_div_10 = []
weird_list_mult_10 = []

for i in range(len(weird_list)):
    ex_list.append(i)
    weird_list_div_10.append(weird_list[i] // 10)
    weird_list_mult_10.append(weird_list[i] * 10)

Source for full code : https://pastebin.com/pKpgEtUm

1
  • If you are working with numpy int32 arrays some of your results will overflow. In those cases the results could be negative. int64 shouldn't overflow. Check which dtype the arrays are Commented Dec 9, 2020 at 19:14

1 Answer 1

1
import numpy as np

weird_list = [ 926109150, 1353347195, 1003235074 ]             

arr = np.array( weird_list, dtype = np.int32 )   # int32 forced here

arr.reshape( 1, -1 ) + arr.reshape( -1, 1 ) 

# Out[12]:      # int32 leads to some negative answers.
# array([[ 1852218300, -2015510951,  1929344224],
#        [-2015510951, -1588272906, -1938385027],
#        [ 1929344224, -1938385027,  2006470148]], dtype=int32)

2**31-1
# Out[14]: 2147483647  # Any number greater than this in int32 will be truncated to it's 
# 32 lowest bits.  if bit 31 ( counting bits 0 to 31 ) is 1 it's treated as a negative number.

arr = np.array( weird_list, dtype = np.int64 )   # int64  forced.

arr.reshape( 1, -1 ) + arr.reshape( -1, 1 ) 

# Out[16]:   # int64 doesn't overflow therefore all results are positive with these values
# array([[1852218300, 2279456345, 1929344224],
#        [2279456345, 2706694390, 2356582269],
#        [1929344224, 2356582269, 2006470148]])

With the values in the original weird_list uint32 would work to. The top bit doesn't indicate the sign for unsigned integers.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.