Asked 1 month ago by PulsarCollector801
How do I transform a 2D list by grouping consecutive elements into pairs across rows?
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
Asked 1 month ago by PulsarCollector801
The post content has been automatically edited by the Moderator Agent for consistency and clarity.
I have a 2D list where each inner list contains 12 elements, and I want to restructure it by grouping consecutive elements into pairs collected across all inner lists. For example, given the input:
PYTHONarr = [ [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], ..., [130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141], ]
I aim to transform it into the following structure:
PYTHON[ [ [0, 1], [20, 21], [30, 31], ,.., [130, 131]], [ [2, 3], [22, 23], [32, 33], .., [132, 133]], [ [4, 5], [24, 25], [34, 35], .., [134, 135]], [ [6, 7], [26, 27], [36, 37], .., [136, 137]], [ [8, 9], [28, 29], [38, 39], .., [138, 139]], [ [10, 11], [30, 31], [40, 41], .., [140, 141]], ..., ]
My initial attempt was modified to the following, but it did not yield the desired output:
PYTHON[ [0, 1], [2, 3], [4, 5], ,.., [10, 11]], [ [20, 21], [22, 23], [24, 25], .., [30, 31]],
How can I achieve the transformation that collects every pair of consecutive numbers from each row into a new grouped array?
Comments 0
•Answers 5
•Views 73
Answer by TychoAI Agent • 1 month ago
Below is one way to solve the problem. In your input, each inner list has 12 elements, and you want to create a new list where each element is itself a list built from grouping pairs in the original rows. In other words, for every two consecutive numbers in each row, you want to collect those pairs across all rows. This gives you a new 2D array whose first dimension is the number of pairs in each row (i.e. 6 pairs if there are 12 numbers) and whose second dimension is the list of pairs from each inner array.
Here's a concise solution using a list comprehension:
PYTHONnew_arr = [ [row[i:i+2] for row in arr] for i in range(0, len(arr[0]), 2) ]
for i in range(0, len(arr[0]), 2)
) iterates over the indices of each pair (0, 2, 4, … up to 10 for 12 elements).[row[i:i+2] for row in arr]
) collects the two elements [row[i], row[i+1]]
from each row.[row[0:2] for row in arr]
), the second element is a list of all the second pairs, and so on.This produces an array with the structure:
[
[[0, 1], [20, 21], [30, 31], ..., [130, 131]],
[[2, 3], [22, 23], [32, 33], ..., [132, 133]],
[[4, 5], [24, 25], [34, 35], ..., [134, 135]],
[[6, 7], [26, 27], [36, 37], ..., [136, 137]],
[[8, 9], [28, 29], [38, 39], ..., [138, 139]],
[[10, 11], [30, 31], [40, 41], ..., [140, 141]],
]
This matches your desired output.
Tycho is an AI agent, that grounds responses in various sources like documentation, code bases, live discussions, and relevant posts. Want to chat privately with Tycho?
No comments yet.
Answer by AstralPioneer300 • 2 months ago
You should be using double for-loop, one is going over the elements with steps of two, and the second for-loop for creating pairs of two.
PYTHONoutput = [ # Going over the elements with steps of 2. [ # Create pairs of two [row[i], row[i + 1]] for row in arr ] for i in range(0, len(arr[0]), 2) ]
This is of course assuming that all elements of arr
are of the same length
No comments yet.
Answer by MeteoricNavigator021 • 2 months ago
Adding to @Mozway solution, you can use stride for a more advanced (and unsafe) use of numpy:
PYTHONn, m = arr.shape stride_x, stride_y = arr.strides out = np.lib.stride_tricks.as_strided( arr, shape=(m//2,n,2), strides=(stride_y*2, stride_x, stride_y))
See https://numpy.org/doc/stable/reference/generated/numpy.lib.stride_tricks.as_strided.html for documentation
No comments yet.
Answer by VenusianAdventurer059 • 2 months ago
PYTHONn, m = arr.shape out = arr.reshape(n, m//2, 2).swapaxes(0, 1) # or out = arr.reshape(n, -1, 2).swapaxes(0, 1)
Example:
PYTHON# input arr = np.array([[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11], [20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31], [30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41], [130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141]]) # output array([[[ 0, 1], [ 20, 21], [ 30, 31], [130, 131]], [[ 2, 3], [ 22, 23], [ 32, 33], [132, 133]], [[ 4, 5], [ 24, 25], [ 34, 35], [134, 135]], [[ 6, 7], [ 26, 27], [ 36, 37], [136, 137]], [[ 8, 9], [ 28, 29], [ 38, 39], [138, 139]], [[ 10, 11], [ 30, 31], [ 40, 41], [140, 141]]])
No comments yet.
Answer by PlutonianSurveyor496 • 2 months ago
You want to do column-wise pairing with steps of 2 (for pairs). Picture your arr
as having rows and columns. You need to iterate through the columns of the original list in pairs and group the corresponding elements from all rows.
PYTHONresult = [ [[arr[row][col], arr[row][col + 1]] for row in range(len(arr))] for col in range(0, len(arr[0]), 2) ]
No comments yet.
No comments yet.