2011-02-02 41 views
7

Tôi có hai mảng numpy 2D như thế này, đại diện cho khoảng cách x/y giữa ba điểm. Tôi cần khoảng cách x/y như tuples trong một mảng duy nhất.Nối hai mảng có dải 2D vào một mảng 2D gồm 2 bộ tóan

Vì vậy từ:

x_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

y_dists = array([[ 0, -1, -2], 
       [ 1, 0, -1], 
       [ 2, 1, 0]]) 

tôi cần:

dists = array([[[ 0, 0], [-1, -1], [-2, -2]], 
       [[ 1, 1], [ 0, 0], [-1, -1]], 
       [[ 2, 2], [ 1, 1], [ 0, 0]]]) 

Tôi đã cố gắng sử dụng hoán vị khác nhau của dstack/hstack/vstack/concatenate, nhưng không ai trong số họ dường như làm những gì tôi muốn . Các mảng thực trong mã chịu trách nhiệm là khổng lồ, vì vậy việc lặp lại các phần tử trong python và thực hiện sắp xếp lại "thủ công" không phải là một lựa chọn tốc độ khôn ngoan.

Edit: Đây là những gì tôi đã đưa ra cuối cùng: https://gist.github.com/807656

+1

là chỉ là một trùng hợp ngẫu nhiên mà 'x_dist' và 'y_dist' đều giống nhau? Ngoài ra ý nghĩa của khoảng cách phủ định trong ứng dụng của bạn là gì? '_dist' allways sẽ là 'đối xứng', nhưng phần uppertridiagonal chỉ tiêu cực? Bạn mong đợi bao nhiêu điểm để xử lý? Mục đích của việc xếp mảng này là gì? Các yếu tố có nằm trong thứ tự 'tối ưu' để tính toán thêm không? Chỉ cần một số khó khăn, cảm ơn – eat

+0

Đó là trùng hợp ngẫu nhiên. Các điểm ví dụ là (0, 0), (1, 1), (2, 2) vì lợi ích của sanity. _dist thực sự là đối xứng. Mục đích của việc xếp mảng là tôi có thể sử dụng chúng để di chuyển các điểm xung quanh. Xem gist được liên kết. – Zarkonnen

Trả lời

10
import numpy as np 
dists = np.vstack(([x_dists.T], [y_dists.T])).T 

lợi nhuận dists như bạn muốn họ. Sau đó nó không phải là "một mảng 2D của 2-tuples", nhưng một mảng 3D bình thường nơi trục thứ ba là nối của hai mảng ban đầu.

Bạn thấy:

dists.shape # (3, 3, 2) 
+1

Đó thực sự là những gì tôi muốn. Tôi sợ rằng việc sử dụng thuật ngữ "mảng 2D của 2 bộ dữ liệu" của tôi khá sai lệch. :( – Zarkonnen

+0

Nhưng ví dụ của bạn về "dists' chờ đợi đã rõ ràng :) – eumiro

7
numpy.rec.fromarrays([x_dists, y_dists], names='x,y') 
+0

Rực rỡ! Đó là chính xác những gì tôi muốn. Vì vậy, um, nhìn như bạn dường như biết về numpy, là chức năng tôi chỉnh sửa một cách lành mạnh để tính toán các khoảng cách cặp đôi? – Zarkonnen

+0

Chỉnh sửa: Thực ra, điều này không cho tôi một mảng mà tôi biết cách làm bất cứ điều gì. – Zarkonnen