У меня есть список чисел, которые нужно преобразовать в числа с плавающей запятой в массиве 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)
Можно просто написать arr = np.array(list) или arr = np.array([1.5, 2.5, 3.5])
Как насчет arr = np.array(lst)? Пожалуйста, не называйте переменные после классов.
Вы путаете 1D с 2D индексированием на np.array/np.ndarray?
@smci Функция np.array возвращает ndarray, поэтому ваш комментарий читается довольно запутанно.
Вы не показали код для MatrixTemplate, это не стандартный пакет, что это?
Хорошо, это хорошо знать. Но как мне это сделать для 2D-массива?
@miradulo: да, моя ошибка. Я поправил.
@smci Редактируется. Шаблон матрицы - это буквально просто массив нулей, которые действуют как заполнители для значений в списке.
NEMM2020: показать код для MatrixTemplate уже, иначе это не воспроизводимый код, и нет смысла спрашивать нас, что он делает
np.array создает объект класса ndarray независимо от того, является ли он 1d, 2d или выше. @smci
@smci Я отредактировал сообщение, включив в него строку кода MatrixTemplate = np.zeros ([45, 45]).
@hpaulj: да, но np.array явно объявляет 1D-массив, который использует 1D-индексирование, согласно предыдущему редактированию OP их вопроса ... это движущаяся цель ...
NEMM2020: строгое соглашение Python использует только MixedCase для имен классов, поэтому похоже, что классы отсутствовали. Следовательно, ваши объекты будут называться matrix_template, gauss_mat или что-то еще. Я отредактировал имена для вас.
Спасибо всем за вашу помощь, но я все еще не понимаю, как преобразовать этот список в массив.






Как насчет настройки dtype вашего GaussMatrix на np.float64?
GaussMatrix = np.array(GaussMatrix, dtype=np.float)
Спасибо, но я получил следующую ошибку: AttributeError: объект 'list' не имеет атрибута 'astype'
Я обновил свой ответ. Я ожидал, что ваш GaussMatrix будет массивом numpy. Это должно работать и для вложенных списков Python. Он сохраняет форму исходного объекта, поэтому изменение формы не требуется.
Во-первых, не используйте 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)
Вы пробовали это? Вы можете распечатать это и посмотреть.