Ich habe zwei 2D-Arrays mit den Abmessungen 831 x 918. Wenn:

Matrix A = [[a (1,1), a (1,2), ...], [a (2,1), a (2,2) ...]] Matrix B = [[b ( 1,1), b (1,2), ...], [b (2,1), b (2,2) ...]]

Ich möchte die beiden Matrizen kombinieren, um eine Liste mit ((a (1,1), b (1,1)), (a (1,2), b (1,2)), ...) zu erstellen. .

Was ist der beste Weg, dies zu tun? Ich habe versucht, die folgenden Zip- und Listenfunktionen zu verwenden:

import numpy as np
from astropy.io import fits
import matplotlib.pyplot as plt

ly=fits.open(lightyield.fits)
ly=ly[0].data
dx=fits.open(de.fits)
dx=dx[0].data
combo=list(zip(dx,ly))

Dies gibt jedoch eine Liste zurück, die 831 Elemente lang ist, aber jede Position in der Liste enthält viele Elemente. Ich möchte nur einen einzelnen (x, y) Punkt für jedes Element in der Liste haben, nicht ein ganzes Array.

Vielen Dank für jede Hilfe. EDIT: Als grundlegendes Beispiel für: A = [[1,2,3], [4,5,6], [7,8,9]] B = [[10,11,12], [13, 14,15], [16,17,18]]

Ich möchte eine Liste mit Plots von ((1,10), (2,11), (3,12), ...) erhalten.

-1
Cougmaster 19 Feb. 2020 im 19:38

3 Antworten

Beste Antwort

Wenn Sie zwei Arrays derselben Form haben wie:

a = np.random.random((10, 15))
b = np.random.random((10, 15))

Sie können diesen Vorgang ausführen, um eine Liste mit den Elementpaaren an derselben Position abzurufen

[(a_, b_) for a_, b_ in zip(a.flatten(), b.flatten())]

Ich hoffe es hilft

0
Pablo Talavante 19 Feb. 2020 im 16:52

Wenn beide Numpy-Arrays sind, können Sie reine Numpy-Funktionen und -Methoden verwenden:

import numpy as np

A = np.arange(1, 10).reshape(3,3)
B = np.arange(10, 19).reshape(3,3)

pairs = np.stack((A,B), axis=2).reshape(-1, 2)
"""
array([[ 1, 10],
   [ 2, 11],
   [ 3, 12],
   [ 4, 13],
   [ 5, 14],
   [ 6, 15],
   [ 7, 16],
   [ 8, 17],
   [ 9, 18]])
"""
0
Jan Christoph Terasa 19 Feb. 2020 im 16:59

Sie können es erreichen, indem Sie dann A und B in ein np-Objekt der Form = (813.918) konvertieren

 result = np.vstack((A[0],B[0])).T
0
Aniket singh 19 Feb. 2020 im 17:21