Mam następną tablicę: b=np.zeros((5,5)).astype('int32')

Chcę wypełnić każdy element powyższej tablicy z listą przy użyciu poniżej dwóch tablic: x=np.linspace(11, 15, 5)

`y=np.linspace(6, 10, 5)`

Wyjście, na które patrzę:

`array([[11,6], [11,7], [11,8], [11,9], [11,10]],
       [[12,6], [12,7], [12,8], [12,9], [12,10]],
       [[13,6], [13,7], [13,8], [13,9], [13,10]],
       [[14,6], [14,7], [14,8], [14,9], [14,10]],
       [[15,6], [15,7], [15,8], [15,9], [15,10]])`
0
Skat 21 luty 2019, 01:40

2 odpowiedzi

Najlepsza odpowiedź

Jak powiedział @dokdrived, musisz najpierw dostosować kształt array b do (5, 5, 2).

Następnie zauważ, że możesz ustawić cały wiersz y, wykonując b[row,:,1] = y i całą kolumnę wartości x, robiąc b[:,col,0] = x.

Numpy również nadaje również kształty, co oznacza, że można użyć tablicy 1D, aby wypełnić tablicę 2D; b[:,:,1] = y wypełnia wszystkie wartości y w jednej operacji, podczas gdy {x2}} zrobi to samo dla wartości x.

Krótko mówiąc, możesz uzyskać to, co chcesz, robiąc:

b = np.zeros((5, 5, 2)).astype('int32')
b[:,:,1] = y
b[:,:,0] = x.reshape((5, 1))

Innym sposobem jest użycie np.meshgrid():

b = np.array(np.meshgrid(x, y)).T.astype('int32')
1
Aleksi Torhamo 20 luty 2019, 23:57

Lekko dostosowałem oryginalną tablicę Numpy, ponieważ nie można zastąpić pojedynczego całkowitego z sekwencją.

import numpy as np

b = np.zeros((5,5,2)).astype('int32')
x = np.linspace(11, 15, 5).astype('int32')
y = np.linspace(6, 10, 5).astype('int32')

idx_x = 0
idx_y = 0

for row in b:
    for _ in row:
        b[idx_x, idx_y] = [x[idx_x], y[idx_y]]
        idx_y += 1
    idx_y = 0
    idx_x += 1

print(b.tolist())

Wynik:

[[[11, 6], [11, 7], [11, 8], [11, 9], [11, 10]], 
 [[12, 6], [12, 7], [12, 8], [12, 9], [12, 10]], 
 [[13, 6], [13, 7], [13, 8], [13, 9], [13, 10]], 
 [[14, 6], [14, 7], [14, 8], [14, 9], [14, 10]], 
 [[15, 6], [15, 7], [15, 8], [15, 9], [15, 10]]]

Jeśli chcesz zachować go jako macierzysta, nie rzuć go za pomocą tolist().

0
DocDriven 20 luty 2019, 23:07