Как объединить более 2 ndarray (переменная) в l oop (одним из них является EMPTY в первом l oop) - PullRequest
1 голос
/ 09 апреля 2020

Я хочу добиться этой функции в Python, как Matlab

в Matlab, код

A = [];
for ii = 0:9
    B = [ii, ii+1, ii**2];
    C = [ii+ii**2, ii-5];
    A = [A, B, C];
end

, но в Python используйте np.hstack или np.concatenate , ndarray должен иметь такое же количество измерений

, если A в первом l oop пусто, код будет ошибаться следующим образом:

for ii in range(10):
    B = np.array([ii, ii+1, ii**2])
    C = np.array([ii+ii**2, ii-5])
        if ii == 0:
            A = np.hstack([B, C])
        else:
            A = np.hstack([A, B, C])

и это мой Python код, B и C являются переменными , а не повтор ndarray, плз, не закрывайте мой вопрос!

for ii in range(10):
    B = np.array([ii, ii+1, ii**2])
    C = np.array([ii+ii**2, ii-5])
    if ii == 0:
        A = np.hstack([B, C])
    else:
        A = np.hstack([A, B, C])

но я думаю, что это немного хлопотно и нечитабельно.

как я могу переписать это? (Лучше использовать только одну строку кода)

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Не зная, каким должен быть результат - я думаю, что это близко

import numpy as np
q = np.arange(10)
bs = np.vstack((q,q+1,q**2)).T
cs = np.vstack((q,q**2,q-5)).T
a = np.hstack((bs,cs))

Или, может быть:

a = np.hstack((bs,cs)).ravel()
0 голосов
/ 09 апреля 2020

IIU C: Используйте это:

A = []
for ii in range(10):
    B = np.array([ii, ii+1, ii**2])
    C = np.array([ii+ii**2, ii-5])
    A = np.hstack([A, B, C]) if len(A) > 0 else np.hstack([B, C])

Результат:

>>> print(A)

[ 0  1  0  0 -5  1  2  1  2 -4  2  3  4  6 -3  3  4  9 12 -2  4  5 16 20
 -1  5  6 25 30  0  6  7 36 42  1  7  8 49 56  2  8  9 64 72  3  9 10 81
 90  4]
...