Массив массивов (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