Я не могу понять, как использовать массив или матрицу так, как я бы обычно использовал список. Я хочу создать пустой массив (или матрицу), а затем добавить к нему один столбец (или строку) за раз.
На данный момент я могу найти единственный способ сделать это:
mat = None
for col in columns:
if mat is None:
mat = col
else:
mat = hstack((mat, col))
Тогда как если бы это был список, я бы сделал что-то вроде этого:
list = []
for item in data:
list.append(item)
Есть ли способ использовать такую запись для массивов или матриц NumPy ?
.empty()
означает, что в ячейках можно найти случайные значения, но массив создается быстрее, чем, например, с помощью.zeros()
?Массив NumPy - это очень отличающаяся структура данных от списка, и он предназначен для использования по-разному. Ваше использование
hstack
потенциально очень неэффективно ... каждый раз, когда вы вызываете его, все данные в существующем массиве копируются в новый. (У этойappend
функции будет та же проблема.) Если вы хотите построить свою матрицу по одному столбцу за раз, лучше всего сохранить ее в списке до ее завершения, и только затем преобразовать в массив.например
item
может быть списком, массивом или любым итеративным, если каждый из нихitem
имеет одинаковое количество элементов.В этом конкретном случае (
data
это итеративный столбец матрицы) вы можете просто использовать(Также обратите внимание, что использование
list
в качестве имени переменной, вероятно, не очень хорошая практика, поскольку оно маскирует встроенный тип под этим именем, что может привести к ошибкам.)РЕДАКТИРОВАТЬ:
Если по какой-то причине вы действительно хотите создать пустой массив, вы можете просто использовать
numpy.array([])
, но это редко полезно!источник
np.concatenate()
), вы можете использовать:np.empty((0, some_width))
. 0, так что ваш первый массив не будет мусором.Чтобы создать пустой многомерный массив в NumPy (например, 2D-массив
m*n
для хранения вашей матрицы), на случай, если вы не знаете,m
сколько строк вы добавите, и не заботитесь о вычислительных затратах, упомянутых Стивеном Симмонсом (а именно, перестройкой массив на каждом Append), вы можете сжать до 0 измерение , к которому вы хотите добавить к:X = np.empty(shape=[0, n])
.Таким образом, вы можете использовать, например (здесь,
m = 5
который мы предполагаем, что мы не знали при создании пустой матрицы, иn = 2
):который даст вам:
источник
Я много разбирался в этом, потому что мне нужно было использовать numpy.array в качестве набора в одном из моих школьных проектов, и мне нужно было инициализировать пустой ... Я не нашел здесь никакого релевантного ответа о переполнении стека, поэтому я начал рисовал что-то
Результат будет:
Поэтому вы можете напрямую инициализировать массив np следующим образом:
Надеюсь, это поможет.
источник
a=np.array([])
Кажется, по умолчаниюfloat64
Вы можете использовать функцию добавления. Для строк:
Для столбцов:
РЕДАКТИРОВАТЬ
Конечно, как упоминалось в других ответах, если вы не выполняете какую-либо обработку (например, инверсию) для матрицы / массива КАЖДЫЙ раз, когда вы добавляете что-то к нему, я просто создаю список, добавляю к нему, а затем преобразую его в массив.
источник
Если вы абсолютно не знаете окончательный размер массива, вы можете увеличить размер массива следующим образом:
0
первую строку.numpy.append
это еще один вариант. Это звонкиnumpy.concatenate
.источник
Вы можете применить его для построения любого вида массива, например, нулей:
источник
a= [0] * 5
это простое решениеВот некоторый обходной путь, чтобы numpys больше походили на Списки
ВЫХОД: массив ([2., 24.])
источник
В зависимости от того, для чего вы это используете, вам может потребоваться указать тип данных (см. «Dtype» ).
Например, чтобы создать двумерный массив 8-битных значений (подходит для использования в качестве монохромного изображения):
Для изображения RGB укажите количество цветовых каналов в форме:
shape=(H,W,3)
Вы также можете рассмотреть возможность инициализации нулями
numpy.zeros
вместо использованияnumpy.empty
. Смотрите примечание здесь .источник
Я думаю, что вы хотите обрабатывать большую часть работы со списками, а затем использовать результат в качестве матрицы. Может быть, это способ;
источник
Я думаю, что вы можете создать пустой массив, как:
Этот формат полезен, когда вы хотите добавить массив NumPy в цикл.
источник
Для создания пустого массива NumPy без определения его формы есть способ:
1.
предпочтительным. потому что вы знаете, что вы будете использовать это как NumPy.
2.
NumPy преобразует это в тип np.ndarray впоследствии, без доп
[]
dimionsion
.источник
Возможно, вы ищете что-то вроде этого:
Таким образом, вы можете создать массив без каких-либо элементов. Это похоже чем:
Таким образом, вы сможете заранее добавлять новые элементы в ваш массив.
источник