Массив массивов (Python/NumPy)
Я использую Python/NumPy, и у меня есть два массива, например:
array1 = [1 2 3]
array2 = [4 5 6]
И я хотел бы создать новый массив:
array3 = [[1 2 3], [4 5 6]]
и добавьте к нему элементы. Так, например, если новые элементы для добавления:
array4 = [7 8 9]
array5 = [10 11 12]
Тогда теперь array3 будет массивом с двумя строками и двумя столбцами, подобными показанному ниже:
array3= [[1 2 3], [4 5 6]
[7 8 9], [10 11 12]]
Кажется, у меня проблемы, потому что элементы моих массивов не разделяются запятыми.
Ответы
Ответ 1
Кажется странным, что вы должны писать массивы без запятых (это синтаксис MATLAB?)
Пробовали ли вы документацию NumPy для многомерных массивов?
Кажется, что NumPy имеет "Python-like" append метод для добавления элементов в n-мерный массив NumPy:
>>> p = np.array([[1,2],[3,4]])
>>> p = np.append(p, [[5,6]], 0)
>>> p = np.append(p, [[7],[8],[9]],1)
>>> p
array([[1, 2, 7], [3, 4, 8], [5, 6, 9]])
Он также ответил ...
Из документации для пользователей MATLAB:
Вы можете использовать матричный конструктор, который берет строку в виде матричного литерала MATLAB:
mat("1 2 3; 4 5 6")
or
matrix("[1 2 3; 4 5 6]")
Пожалуйста, попробуйте и скажите мне, как это происходит.
Ответ 2
Если файл представляет собой только числовые значения, разделенные вкладками, попробуйте использовать библиотеку csv:
http://docs.python.org/library/csv.html
(вы можете установить разделитель на '\ t')
Если у вас есть текстовый файл, в котором каждая строка представляет строку в матрице и имеет целые числа, разделенные пробелами \tabs, завернутые синтаксисом 'arrayname = [...]', вы должны сделать что-то вроде:
import re
f = open("your-filename", 'rb')
result_matrix = []
for line in f.readlines():
match = re.match(r'\s*\w+\s+\=\s+\[(.*?)\]\s*', line)
if match is None:
pass # line syntax is wrong - ignore the line
values_as_strings = match.group(1).split()
result_matrix.append(map(int, values_as_strings))
Ответ 3
У вас возникнут проблемы с созданием списков без запятых. Не должно быть слишком сложно преобразовать ваши данные, чтобы использовать запятые в качестве разделительного символа.
Как только у вас есть запятые, это относительно простые операции создания списка:
array1 = [1,2,3]
array2 = [4,5,6]
array3 = [array1, array2]
array4 = [7,8,9]
array5 = [10,11,12]
array3 = [array3, [array4, array5]]
При тестировании получаем:
print(array3)
[[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]]
И если мы тестируем с индексированием, он корректно считывает матрицу, состоящую из двух строк и двух столбцов:
array3[0][1]
[4, 5, 6]
array3[1][1]
[10, 11, 12]
Надеюсь, что это поможет.
Ответ 4
а = np.array([[1,2,3], [4,5,6]])
a.tolist()
Вышеупомянутый метод tolist вернет список вложенных Python