Преобразование числового списка Python в массив чисел с плавающей запятой

У меня есть список чисел, которые нужно преобразовать в числа с плавающей запятой в массиве 45 x 45.

gauss_matrix = [list of 2025 float numbers]
mat_template = np.zeros([45, 45])
for rows in np.arange(45):
    for columns in np.arange(45):
          mat_template[rows, columns] = float(gauss_matrix[np.arange(2025)])

Начинается ли это с строки 0, проходит через столбцы 0-44. Затем начните со строки 2, пропустите столбцы 0-44 и так далее?

Разрешенный код: (спасибо за помощь!)

   with open('gaussfilter.csv', 'r+') as gauss:  # Let's me read and write gaussfilter.csv

GaussFilterData = gauss.readlines()  # Reads the lines of the csv file
# print("GaussFilterData: \n", GaussFilterData)

GaussList = []  # Empty list which will be used to append values to from the csv file
# print("GaussList 1: \n", GaussMatrix)

for lines in GaussFilterData:  # Loops through each row of data in gaussfilter.csv
    # print("lines: \n", lines)
    for row in np.arange(45):  # Looping through each row and splitting up the list by commas, while converting each value to a float and not a string
        GaussList.append(float(lines.split(',')[row]))  # Appending each row to GaussList

# print("\nGaussList 2: \n", GaussList)

# Making the array of values from GaussList
gauss = np.zeros([45, 45])  # Matrix of zeros, the zeros are placeholders for the values in GaussList
# print("gauss: \n", gauss)

Counter = -1  # Counter has to start at -1 so that it begins at 0 when referring to row 0 and column 0
for rows in np.arange(45):  # Loop through rows 0 - 44
        for columns in np.arange(45):  # As we are looping through row 0, loop through all 45 columns
            Counter = Counter + 1  # Counter keeps track of the number of cells in the matrix (2025)
            gauss[rows][columns] = GaussList[Counter]

     print("gauss array: \n", gauss)

Вы пробовали это? Вы можете распечатать это и посмотреть.

whackamadoodle3000 15.04.2018 23:51

Можно просто написать arr = np.array(list) или arr = np.array([1.5, 2.5, 3.5])

smci 15.04.2018 23:51

Как насчет arr = np.array(lst)? Пожалуйста, не называйте переменные после классов.

jpp 15.04.2018 23:51

Вы путаете 1D с 2D индексированием на np.array/np.ndarray?

smci 15.04.2018 23:53

@smci Функция np.array возвращает ndarray, поэтому ваш комментарий читается довольно запутанно.

miradulo 15.04.2018 23:55

Вы не показали код для MatrixTemplate, это не стандартный пакет, что это?

smci 15.04.2018 23:55

Хорошо, это хорошо знать. Но как мне это сделать для 2D-массива?

NEMM2020 15.04.2018 23:56

@miradulo: да, моя ошибка. Я поправил.

smci 15.04.2018 23:56

@smci Редактируется. Шаблон матрицы - это буквально просто массив нулей, которые действуют как заполнители для значений в списке.

NEMM2020 15.04.2018 23:57

NEMM2020: показать код для MatrixTemplate уже, иначе это не воспроизводимый код, и нет смысла спрашивать нас, что он делает

smci 15.04.2018 23:58
np.array создает объект класса ndarray независимо от того, является ли он 1d, 2d или выше. @smci
hpaulj 15.04.2018 23:59

@smci Я отредактировал сообщение, включив в него строку кода MatrixTemplate = np.zeros ([45, 45]).

NEMM2020 16.04.2018 00:00

@hpaulj: да, но np.array явно объявляет 1D-массив, который использует 1D-индексирование, согласно предыдущему редактированию OP их вопроса ... это движущаяся цель ...

smci 16.04.2018 00:01

NEMM2020: строгое соглашение Python использует только MixedCase для имен классов, поэтому похоже, что классы отсутствовали. Следовательно, ваши объекты будут называться matrix_template, gauss_mat или что-то еще. Я отредактировал имена для вас.

smci 16.04.2018 00:02

Спасибо всем за вашу помощь, но я все еще не понимаю, как преобразовать этот список в массив.

NEMM2020 16.04.2018 00:13
Ваш код очень трудно читать, и в нем есть ошибки с отступами. Исправьте это и отредактируйте, чтобы следовать универсальному соглашению Python о нижнем регистре для всех объектов и переменных, MixedCase для классов. В противном случае этот вопрос скорее всего будет закрыт очень скоро.
smci 16.04.2018 02:08
Почему в 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 может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
16
8 999
2

Ответы 2

Как насчет настройки dtype вашего GaussMatrix на np.float64?

GaussMatrix = np.array(GaussMatrix, dtype=np.float)

Спасибо, но я получил следующую ошибку: AttributeError: объект 'list' не имеет атрибута 'astype'

NEMM2020 16.04.2018 00:09

Я обновил свой ответ. Я ожидал, что ваш GaussMatrix будет массивом numpy. Это должно работать и для вложенных списков Python. Он сохраняет форму исходного объекта, поэтому изменение формы не требуется.

Niklas Mertsch 16.04.2018 11:21

Во-первых, не используйте list, поэтому я изменил его на my_list.

Вы можете создать массив, используя 'np.array ()', и вы можете указать свой тип данных, используя необязательный флаг 'dtype'.

>>> import numpy as np
>>> my_list = [1.5, 2.5, 3.5]
>>> my_array = np.array(my_list,dtype = " ")

И всегда вы можете проверить свой тип данных, используя:

>>> my_array.dtype
dtype('float64')

вы можете использовать my_array.reshape (n, m)

Ashlou 16.04.2018 01:59

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