python numpy добавить 1 элемент в пустую матрицу - PullRequest
0 голосов
/ 12 января 2019

Я инициализировал матрицу:

M = np.array(((),()))

М теперь имеет форму (2,0). Я хочу заполнить M по шагам: во-первых, добавить 1 номер, как

M[0] = np.append(M[0],55)

По этой операции я хочу получить такую ​​матрицу

((55),())

Как я могу это сделать? Я могу сделать это с помощью стандартных массивов питонов [] с помощью операции добавления, например * 1010

arr = [[],[]]
arr[0].append(55)

Но после этого мне нужно, чтобы этот массив был пустым массивом, и есть одна дополнительная операция преобразования типа, которую я хотел бы избежать.

Ответы [ 2 ]

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

Я могу начать с двухэлементного массива dtype объекта:

In [351]: M = np.array((None,None))
In [352]: M.shape
Out[352]: (2,)
In [353]: M
Out[353]: array([None, None], dtype=object)
In [354]: M[0]=(5,)
In [355]: M[1]=()
In [356]: M
Out[356]: array([(5,), ()], dtype=object)
In [357]: print(M)
[(5,) ()]

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

In [362]: np.array([(55,),()])
Out[362]: array([(55,), ()], dtype=object)

Но я не понимаю, для чего это хорошо. Было бы проще составить список кортежей:

In [359]: [(5,), ()]
Out[359]: [(5,), ()]

Не пытайтесь использовать np.append как добавление в список. Это просто неуклюжий интерфейс к np.concatenate.


M как вы его создали:

In [360]: M = np.array(((),()))
In [361]: M
Out[361]: array([], shape=(2, 0), dtype=float64)

Не может содержать никаких элементов. И вы не можете изменить форму слотов, как вы можете с помощью списка. В numpy shape и dtype значимы.

Вы можете указать object dtype:

In [367]: M = np.array([(),()], object)
In [368]: M
Out[368]: array([], shape=(2, 0), dtype=object)

но все еще невозможно ссылаться и изменять один из этих 0 элементов.

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

Массив, который вы написали, не является матрицей, потому что его ось имеет разные размеры. Вы могли бы сделать это так

  import numpy as np
  x = np.zeros((2,1))
  x[0][0] = 55

Тогда, если вы хотите добавить к нему, вы можете сделать что-то вроде:

x = np.append(x, [[42], [0]], axis=1)

Обратите внимание, что для добавления к martrix все размеры, кроме оси конкатенации, должны точно совпадать

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