Как вставить числа (i+1) в ndarray в начале?

У меня есть ndarray в файле npz, и я пытаюсь вставить числа в индекс 0, а вставленные числа должны увеличиваться на 1. Ниже мой массив

data = [[[3.56, 7.94, 1.78], [8.23, 1.25, 4.80], [0.51, 8.23, 5.67], [9.56, 7.94, 2.78], [5.23, 7.25, 0.80],...]]

И полученный ndarray должен понравиться

data = [[[0, 3.56, 7.94, 1.78], [1, 8.23, 1.25, 4.80], [2, 0.51, 8.23, 5.67], [3, 9.56, 7.94, 2.78], [4, 5.23, 7.25, 0.80],...]]

Я новичок в этой области, поэтому мне нужна помощь в решении этой проблемы.

Более того, я попробовал это решение, но оно для 1D-массива.

Мой пример кода

import numpy as np

a = np.load('abc.npz')['data']
b = a.insert(a, 0+1) # I'm confused here
np.savez('new.npz', data=b)

Ищу некоторые предложения

Итак, вы хотите добавить новый номер в начало каждого подмассива?

Dani Mesejo 25.12.2020 08:26

Да так же, как я показал приведенный массив.

Erric 25.12.2020 08:28

Для этого вам нужно использовать семейство операций numpy.stack

MYousefi 25.12.2020 08:29

Какова форма вашего массива?

Dani Mesejo 25.12.2020 08:29

@DaniMesejo Форма массива (1, 5, 3), но после вставки элемента в начало каждого подмассива она должна быть (1, 5, 4)

Erric 25.12.2020 08:35
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
176
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ты должен сделать:

import numpy as np

data = np.array([[[3.56, 7.94, 1.78], [8.23, 1.25, 4.80], [0.51, 8.23, 5.67], [9.56, 7.94, 2.78], [5.23, 7.25, 0.80]]])

res = np.insert(data, 0, np.arange(data.shape[1]), axis=2)
print(res)

Выход

[[[0.   3.56 7.94 1.78]
  [1.   8.23 1.25 4.8 ]
  [2.   0.51 8.23 5.67]
  [3.   9.56 7.94 2.78]
  [4.   5.23 7.25 0.8 ]]]

Из документации, на вставка:

Вставьте значения вдоль данной оси перед заданными индексами.

Итак, в основном вам нужно указать массив (data), индексы (0), значения для вставки (np.arange(data.shape[1])) и ось.

Спасибо за решение, это решение может работать, но оно дает числа с плавающей запятой (0., 1., 2.,,,,) Что, если нам нужны только целые числа? Я имею в виду, что вставленные числа должны быть целыми числами.

Erric 25.12.2020 08:45

@Erric Вы не можете иметь целые числа и числа с плавающей запятой в одном и том же массиве, другие элементы являются числами с плавающей запятой. В массивах numpy все элементы должны иметь один и тот же тип. Вы можете попробовать использовать объект dtype, но я не рекомендую.

Dani Mesejo 25.12.2020 08:47

Так что нет возможности добавить в качестве индексации или, может быть, мы можем написать новый файл в json?

Erric 25.12.2020 08:50

Что вы подразумеваете под «добавить как индексацию», зачем вам это нужно, почему бы просто не использовать индексы, уже определенные для массивов?

Dani Mesejo 25.12.2020 08:52

На самом деле мне нужны целые числа.

Erric 25.12.2020 08:55

Если вам нужны целочисленные индексы, просто обратитесь к размеру массива, как предложил Дани Месехо: (np.arange(data.shape[1])) Если вы сохраните его в массиве, тип данных будет одинаковым для всех чисел.

enrico_ay 25.12.2020 09:20
Ответ принят как подходящий

Я решил свою проблему. Мне помог Дани Месехо, и я позаимствовал у него некоторые идеи.

Ниже приведено решение

data = data.tolist()
for index, d in enumerate(data[:]): # slicing
    d.insert(0, index) # insert numbers in 0 index of every list.

Идея заключалась в том, чтобы преобразовать ndarray в список, а затем мы можем сохранить его в npz или json после сериализации.

Другие вопросы по теме