2016-08-08 2 views
3

У меня есть следующая матрица A = [1.00 2.00; 3.00 4.00] и мне нужно, чтобы преобразовать его в вектор векторов следующим образом:Как преобразовать матрицу в вектор векторов?

A1 = [1.00; 3.00] A2 = [2.00; 4.00]

Есть идеи?

+3

Хотите вектор вектора или отдельных объектов для каждого вектора? В ваших текстовых индикаторах изображен первый, ваш код показывает последний. –

+1

Кроме того, можете ли вы дать контекст, почему вам это нужно? Почти в каждом случае, о котором я могу думать, вам лучше просто ссылаться на столбцы, пока они все еще находятся в вашей матрице или не более, создавая отдельные представления их с помощью 'sub()', например. 'B = sub (A, 1: размер (A, 2), 1)'. –

ответ

6

Т.Л., др
Это может быть очень элегантно создан с списком понимания:

A = [A[:,i] for i in 1:size(A,2)] 


Объяснение :

Это, по существу, преобразует A из чего-то, что было бы проиндексировано как A[1,2] тому, что было бы проиндексировано как A[2][1], это то, что вы просили.

Здесь я непосредственно передаю A, что мне кажется, что вы имели в виду. Но сделайте это, только если код недвусмыслен! Как правило, не очень хорошо иметь переменные с одинаковым именем, которые представляют разные вещи в разных точках кода.

ПРИМЕЧАНИЕ: если это обращение из строки/столбца в порядок индексации не порядок вы имели в виду, и вы бы предпочли A[1,2] быть проиндексированы, как A[1][2], а затем выполнить список вашего понимания «в row 'вместо этого, т.е.

A = [A[i,:] for i in 1:size(A,1)] 
1

Было бы гораздо лучше просто использовать кусочки вашей матрицы т.е. вместо A1 использовать A[:,1] и вместо А2 использовать A[:,2]

Если вам действительно нужно, чтобы они были «Seperate» возражения вы могли бы попробовать создать массив ячеек так:

myfirstcell = cell(size(A,2)) for i in 1:size(A,2) myfirstcell[i] = A[:,i] end

См http://docs.julialang.org/en/release-0.4/stdlib/arrays/#Base.cell

(Массивы ячеек позволяют несколько различных типов объектов, которые будут храниться в одном массиве)

+1

Вы можете, по крайней мере, иметь массив массивов явно, без необходимости использовать 'cell'' A_vec = Array {Array {eltype (A), 1}, размер (A, 2)} ' –

+0

Согласованный, принятый ответ по-прежнему гораздо лучше! –

Смежные вопросы