Добавление столбцов в матрицу в цикле - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь добавить выборочные столбцы из одной матрицы в другую в цикле, когда условие становится истинным.Я пробовал различные комбинации, но он добавляет в строки с помощью команд np.append и т. Д. Любая помощь приветствуется.Спасибо

Я пробовал команды np.append, np.concatenation, np.hstack, но не получил желаемого решения.

n,m=np.shape(K)
Z=np.array([])
for number in range(m):
    A=function
    if A<0.05:
        Z = np.append(Z,np.vstack(K[:,number]))

Я хочу матрицу Z со столбцами K, которые удовлетворяют условиюA. Как Z = [K [:, 3] K [:, 8] K [:, 10]]

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Numpy фактически предназначен для быстрых / устойчивых матричных операций, таких как умножение, сложение и т. Д.

Поскольку вы имеете дело со структурой таблиц строк / столбцов и манипуляциями с ними.Я настоятельно рекомендую вам использовать Pandas Dataframe

Вы можете легко добавлять столбцы или даже объединять две матрицы в зависимости от условий (да, например, объединения SQL).

Посмотрите на df.assign

df = pd.Dataframe(npArray)
df.assign('newcolumn', yourNewColumnValuesAsList)
0 голосов
/ 24 января 2019
In [21]: Z=np.array([])
In [22]: Z.shape
Out[22]: (0,)

Как вы ожидаете добавить что-то в массив с этой формой?

np.append работает, но только потому, что если сначала убедиться, что Z по крайней мере 1d, то есть это ravelsit.

In [23]: np.append(Z,np.arange(10))
Out[23]: array([0., 1., 2., 3., 4., 5., 6., 7., 8., 9.])

Нам нужны какие-то большие жирные буквы в numpy, в которых говорится, НЕ ПЫТАЙТЕСЬ ПРИЛОЖИТЬ (или объединять, или складывать), Массивы в цикле.

Вы пробовалипостроение списка столбцов с последующим использованием только одной конкатенации?

alist = []
for i in [3,8,10]:
    alist.append(K[:,[i]])
print(alist)
Z = np.concatenate(alist, axis=1)
# Z=[K[:,3] K[:,8] K[:,10]]

или

alist = []
alist.append(3); alist.append(8); alist.append(10)
Z = K[:,alist]

У многократных конкатенаций массивов есть две большие проблемы - это медленный процесс, и его трудно получитьначалось.Этот (0,) массив фигур является горячей заменой пустого списка.

Если вам нужно сделать что-то итеративно, подумайте о списках.Добавление списка является относительно быстрым и простым в использовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...