N мерный массив в python
Новое в Python и Numpy, пытающихся создать 263-мерные массивы.
Мне нужно так много измерений для модели машинного обучения.
Конечно, один из способов-это использование numpy.нули или numpy.единицы и написание кода, как показано ниже:
x=np.zeros((1,1,1,1,1,1,1,1,1,1,1)) #and more 1,1,1,1
Существует ли более простой способ создания массивов со многими измерениями?
3 ответов:
Вам не нужны 263-измерения . Если бы каждое измерение имело только размер 2, у вас все еще были бы элементы
2 ** 263, которые являются: 14821387422376473014217086081112052205218558037201992197050570753012880593911808Вы ничего не сможете сделать с такой матрицей : даже не инициализируете на серверах Google.
Вам либо понадобится массив с 263 значениями:
>>> np.zeros(263) array([ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.])Или матрица с 263 векторами M элементов (скажем, 3):
>>> np.zeros((263, 3)) array([[ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], ... ... [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.], [ 0., 0., 0.]])Есть много продвинутых научно-исследовательские центры, что совершенно счастливы с ванилином и NumPy. Необходимость использовать менее 32 измерений, похоже, не сильно беспокоит их для квантовой механики или машинного обучения.
Начнем с документации
numpy,help(np.zeros)даетАргумент shape - это просто список размеров каждого измерения (но вы, вероятно, знали об этом). Есть много способов легко создать такой список в python, один быстрый способ -zeros(shape, dtype=float, order='C') Return a new array of given shape and type, filled with zeros. Parameters ---------- shape : int or sequence of ints Shape of the new array, e.g., ``(2, 3)`` or ``2``. ... Returns ------- out : ndarray Array of zeros with the given shape, dtype, and order. ...Но, как упоминали другие,np.zeros(np.ones(263, dtype=int))numpyимеет несколько произвольное ограничение в 32 измерения. По моему опыту, вы можете получить подобное и более гибкое поведение, сохраняя массив индексов, показывающий, к какому "измерению" принадлежит каждая строка к.
Скорее всего, для приложений ML вы на самом деле не хотите этого:
shape = np.random.randint(1,10,(263,)) arr = np.zeros(shape) # causes a ValueError anywayВы на самом деле хотите что-то редкое
for i, value in enumerate(nonzero_values): arr[idx[i]] = value
idxв данном случае это массив(num_samples, 263), аnonzero_values- массив(num_samples,).Алгоритмы ML обычно работают на этих
idxиvalueмассивах (обычно называемыхXиY), поскольку в противном случае фактические массивы были бы огромными.Иногда вам нужен" горячий " массив ваших измерений, который сделает
idx.shape == (num_samples, shape.sum()), Сidxсодержащим только 0 или 1 ценности. Но это все равно меньше, чем любая высокодиметрическая матрица.
Comments