Можно ли складывать столбцы в матрице: Действия над матрицами /qualihelpy

Элементарные преобразования матрицы : Высшая алгебра

Сообщения без ответов | Активные темы | Избранное



Правила форума

В этом разделе нельзя создавать новые темы.

Если Вы хотите задать новый вопрос, то не дописывайте его в существующую тему, а создайте новую в корневом разделе “Помогите решить/разобраться (М)”.

Если Вы зададите новый вопрос в существующей теме, то в случае нарушения оформления или других правил форума Ваше сообщение и все ответы на него могут быть удалены без предупреждения.

Не ищите на этом форуме халяву, правила запрещают участникам публиковать готовые решения стандартных учебных задач. Автор вопроса обязан привести свои попытки решения и указать конкретные затруднения.

Обязательно просмотрите тему Правила данного раздела, иначе Ваша тема может быть удалена или перемещена в Карантин, а Вы так и не узнаете, почему.


 
Sonic86 

 Элементарные преобразования матрицы

04. 04.2012, 18:07 

Заслуженный участник

08/04/08
8548

Дана матрица с целыми числами.
Можно ли ее элементарными преобразованиями привести к виду, когда в ячейках с номерами и стоят нули (т.е. приводима к диагональному виду)?
А если матрица может быть дополнена до квадратной так, что ее определитель равен 1?
Что-то не допираю


   

                  

Профессор Снэйп 

 Re: Элементарные преобразования матрицы

04. 04.2012, 18:09 

Заморожен

18/12/07

8774
Новосибирск

А что считается элементарным преобразованием? Домножение строки или столбца на число, вычитание одной строки или столбца из другой (другого) или что-то ещё? Или я что-то лишнее привнёс?

Если ничего не привнёс, то вычитайте третий столбец из первого и второго поочерёдно, и всё у Вас получится.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

04. 04.2012, 18:11 

Заслуженный участник

08/04/08
8548

Профессор Снэйп в сообщении #556180 писал(а):

А что считается элементарным преобразованием? Домножение строки или столбца на число, вычитание одной строки или столбца из другой (другого) иличто-то ещё?

Только сложение или вычитание одной строки с другой. Еще можно строку умножать на .

Профессор Снэйп в сообщении #556180 писал(а):

Если ничего не привнёс, то вычитайте третий столбец из первого и второго поочерёдно, и всё у Вас получится.

Вот как раз получается, что нельзя. Вычитая одну строку из другой (алгоритмом Евклида по элементам 1-го столбца) я могу получить один нулик. А второй нулик дальше необязателен (например ), но можно выбрать другой столбец и к нему применять алгоритм Евклида…


   

                  

Профессор Снэйп 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:15 

Заморожен

18/12/07
8774
Новосибирск

Sonic86 в сообщении #556181

писал(а):

Только сложение или вычитание одной строки с другой

Ну, в общем-то можно.

Преположим, что все числа матрицы попарно взаимно просты. Последовательным вычитанием строк друг из друга добейтесь того, чтобы было равно . Далее вычитанием строк сделайте . Далее третий столбец из первого и второго…

— Ср апр 04, 2012 21:16:45 —

Если взаимной простоты нет, то тоже можно, только муторно объяснять. Но принцип тот же.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:18 

Заслуженный участник

08/04/08
8548

Профессор Снэйп в сообщении #556186 писал(а):

Далее третий столбец из первого и второго. ..

Ну нельзя же столбцы складывать только строки.

Профессор Снэйп в сообщении #556186 писал(а):

Если взаимной простоты нет

Вот, кстати, сразу пример, что числа могут быть не взаимно просты: .


   

                  

Профессор Снэйп 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:19 

Заморожен

18/12/07
8774
Новосибирск

Sonic86 в сообщении #556187 писал(а):

только строки.

А-а-а… Тогда, конечно, нельзя!

Непонятно, зачем Вам матрица , если третий столбец ни на что не влияет.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:21 

Заслуженный участник

08/04/08
8548

Профессор Снэйп в сообщении #556190 писал(а):

Непонятно, зачем Вам матрица , если третий столбец ни на что не влияет.

Я пока не знаю, вообще на самом деле есть условие

Sonic86 в сообщении #556178 писал(а):

А если матрица может быть дополнена до квадратной так, что ее определитель равен 1?

т.е. тут уже 3-й столбец играет роль. Я просто на всякий случай еще и в общем виде спрашиваю, без этого условия.


   

                  

bot 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:49 

Заслуженный участник

21/12/05
5832
Новосибирск

Смущает размер . С квадратными понятно – ровно тот же алгоритм приведения к канонической диагональной форме, что и для -матриц. Или дополнительно допускается вычёркивание нулевой строки (столбца)?

Э.п. я полагаю, обычные?
а) умножение строки (столбца) на -1.
б) прибавление к строке (столбцу) другой строки (столбца) с произвольным целым коэффициентом.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

04.04.2012, 18:59 

Заслуженный участник

08/04/08
8548

bot в сообщении #556212 писал(а):

Э. п. я полагаю, обычные?
а) умножение строки (столбца) на -1.
б) прибавление к строке (столбцу) другой строки (столбца) с произвольным целым коэффициентом.

Нет, только так:
а) умножение строки на -1.
б) прибавление к строке другой строки с произвольным целым коэффициентом.

bot в сообщении #556212 писал(а):

Смущает размер . С квадратными понятно – ровно тот же алгоритм приведения к канонической диагональной форме, что и для -матриц. Или дополнительно допускается вычёркивание нулевой строки (столбца)?

Размер в принципе вообще любой. Нулевые строки вычеркивать нельзя. Но здесь это все несущественно.


   

                  

bot 

 Re: Элементарные преобразования матрицы

04. 04.2012, 20:25 

Заслуженный участник

21/12/05
5832
Новосибирск

Вот это и непонятно – что такое диагональная неквадратная матрица? Если э.п. только строк, то и квадратную не всякую привести к диагональной можно.
Долго не думал, но вот к примеру такую кажется не получится.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

04. 04.2012, 20:32 

Заслуженный участник

08/04/08
8548

bot в сообщении #556267 писал(а):

Долго не думал, но вот к примеру такую кажется не получится.

Ага Только это , а надо .

bot в сообщении #556267 писал(а):

Вот это и непонятно – что такое диагональная неквадратная матрица? Если э.п. только строк, то и квадратную не всякую привести к диагональной можно.

Я хочу такими ЭП привести к (ее первая подматрица диагональна). Либо в общем случае, либо когда данная матрица дополняется 3-й строкой до матрицы с определителем 1 (не знаю, какой вариант правильней).


   

                  

lofar 

 Re: Элементарные преобразования матрицы

04.04.2012, 22:48 

Заслуженный участник

28/09/05
287

ЭП строк матрицы, как известно, можно представить в виде умножения этой матрицы на некоторую матрицу (матрицу элементарного преобразования) слева. Например, умножение слева на матрицу

равнозначно прибавлению ко второй строке первой строки умноженной на .
Последовательное применение ЭП равнозначно умножению слева на некоторое произведение матриц ЭП. Все матрицы ЭП имеют определитель равный . Значит их произведения тоже имеют определитель равный . Верно и обратное: целочисленная матрица с определителем является произведением матриц ЭП.

Из сказанного следует решение вашего вопроса. Матрица

не может быть приведена ЭП строк к виду (это, как раз, следует из сказанного выше о том, что последовательность ЭП строк равнозначно умножению слева на матрицу с определителем )

При этом она дополняется до матрицы с определителем :


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

05. 04.2012, 06:27 

Заслуженный участник

08/04/08
8548

lofar

, извините, я все-таки неправильно сформулировал , порядок столбцов мне не важен.
Т.е. давайте допустим в качестве ЭП еще и перестановки столбцов. Если так, то матрица перестановкой столбцов приводима к искомому виду.


   

                  

Sender 

 Re: Элементарные преобразования матрицы

05. 04.2012, 17:00 

14/01/11
2828

Sonic86 в сообщении #556178 писал(а):

Можно ли ее элементарными преобразованиями привести к виду, когда в ячейках с номерами и стоят нули (т.е. приводима к диагональному виду)?

Нет, нельзя. Контрпример:

,

Дополняемая до квадратной с единичным определителем:

.


   

                  

Sonic86 

 Re: Элементарные преобразования матрицы

05. 04.2012, 18:05 

Заслуженный участник

08/04/08
8548

Ммм, фигово…
Sender

, спасибо


   

                  

Показать сообщения за: Все сообщения1 день7 дней2 недели1 месяц3 месяца6 месяцев1 год Поле сортировки АвторВремя размещенияЗаголовокпо возрастаниюпо убыванию 
  Страница 1 из 1
 [ Сообщений: 15 ] 

Модераторы: Модераторы Математики, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:

1 Билет

Ма́трица — математический объект, записываемый в виде прямоугольной таблицы элементов кольца или поля (например, целых или комплексных чисел), которая представляет собой совокупность строк и столбцов, на пересечении которых находятся её элементы. Количество строк и столбцов матрицы задают размер матрицы.

действия над матрицами.

1. Сложение и вычитание матриц:

Сложение и вычитание матриц – одно из простейших действий над ними, т.к. необходимо сложить или отнять соответствующие элементы двух матриц. Главное помнить, что складывать и вычитать можно только матрицыодинаковых размеров, т.е. тех, у которых одинаковое количество строк и одинаковое количество столбцов.

Например, пусть даны две матрицы равного размера 2х3, т.е. с двумя строками и тремя столбцами:

Сумма двух матриц:

Разность двух матриц:

2. Умножение матрицы на число:

Умножение матрицы на число – процесс, заключающийся в умножении числа на каждый элемент матрицы.

Например, пусть дана матрица А:

Умножим число 3 на матрицу А:

3. Умножение двух матриц:

Умножение двух матриц возможно только при условии, что число столбцов первой матрицы должно равняться числу строк второй. Новая матрица, которая получится при умножении матриц, будет состоять из количества строк, равное количеству столбцов первой матрицы и количества столбцов, равное количеству строк второй матрицы.

Предположим есть две матрицы размерами 3х4 и 4х2, т.е. в первой матрице 3 строки и 4 столбца, а во второй матрице 4 строки и 2 столбца. Т.к. количество столбцов первой матрицы (4), равно количеству строк второй матрицы (4), то матрицы можно перемножить, новая матрица будет иметь размер: 3х2, т.е. 3 строки и 2 столбца.

Можно представить все это в виде схемы:

После того как Вы определились с размером новой матрицы, которая получится при умножении двух матриц,  можно приступить к заполнению этой матрицы элементами. Если Вам надо заполнить первую строчку первого столбца этой матрицы, то надо каждый элемент первой строки первой матрицы умножать на каждый элемент первого столбца второй матрицы, если будем заполнять вторую строку первого столбца соответственно будем брать каждый элемент второй строки первой матрицы и умножать на первый столбец второй матрицы и т.д.

Посмотрим как это выглядит на схеме:

Посмотрим как это выглядит на примере:

Даны две матрицы:

Найдем произведение этих матриц:

4. Деление матриц:

Деление матриц – действие над матрицами, которое в этом понятии не встретишь в учебниках. Но если есть необходимость разделить матрицу А на матрицу В, то в этом случае используют одно из свойств степеней:

Согласно этому свойству разделим матрицу А на матрицу В:

В результате задача о делении матриц сводиться к умножению обратной матрицы матрице В на матрицу А.

Задачу об обратной матрице рассмотрим в следующей статье.

Итак мы рассмотрели действия над матрицами.

Определителем или детерминантом n-го порядка называется число записываемое в виде

                

Свойства определителя n-го порядка

Свойство 1. При замене строк столбцами (транспонировании) значение определителя не изменится, т.е.

Свойство 2. Если хотя бы один ряд (строка или столбец) состоит из нулей, то определитель равен нулю. Доказательство очевидно.

В самом деле, тогда в каждом члене определителя один из множителей будет нуль.

Свойство 3. Если в определителе поменять местами два соседних параллельных ряда (строки или столбцы), то определитель поменяет знак на противоположный, т.е.

 

Свойство 4. Если в определителе имеются два одинаковых параллельных ряда, то определитель равен нулю:

Свойство 5. Если в определителе два параллельных ряда пропорциональны, то определитель равен нулю:

Свойство 6. Если все элементы определителя, стоящие в одном ряду, умножить на одно и то же число, то значение определителя изменится в это число раз:

Следствие. Общий множитель, содержащийся во всех элементах одного ряда, можно вынести за знак определителя, например:

 

Свойство 7. Если в определителе все элементы одного ряда представлены в виде суммы двух слагаемых, то он равен сумме двух определителей:

Свойство 8. Если к элементам какого-либо ряда прибавить произведение соответствующих элементов параллельного ряда на постоянный множитель, то значение определителя не изменится:

Свойство 9. Если к элементам i-го ряда прибавить линейную комбинацию соответствующих элементов нескольких параллельных рядов, то значение определителя не изменится:

numpy — добавление столбцов в матрицу в python

спросил

Изменено 3 года, 5 месяцев назад

Просмотрено 64к раз

Есть ли в python способ добавления столбцов в матрицу. Я хочу добавить столбец в начало моей матрицы mxn в python. Например, у меня есть 9Матрица 0011 1000×100 , и я хочу превратить ее в матрицу 1000x101 . Я хочу вставить новый столбец, содержащий все из в начале, т.е. это будет мой новый первый столбец. Возможно ли это в питоне?

Вот мой код- vector1 — список, cnt — 1000

 data=np.array(vector1)
форма = (цент, 100)
данные = data.reshape (форма)
 

Теперь к этому я хочу добавить новый столбец в начале со всеми единицами

  • python
  • число

4

Функция, которую вы ищете в numpy.hstack и numpy.ones :

Например,

 import numpy as np
X = np.random.uniform (размер = (10,3))
n,m = X.shape # для общности
X0 = np.ones ((n, 1))
Xnew = np.hstack((X,X0))
печать (Х)
[[ 0,78614426 0,24150772 0,94330932]
 [0,60088812 0,20427371 0,19453546]
 [0,31853252 0,31669057 0,82782995]
 [ 0,71749368 0,54609844 0,74924888]
 [0,86883981 0,54634575 0,83232409]
 [0,89313181 0,8006561 0,05072146]
 [0,79492088 0,07750024 0,45762175]
 [0,92350837 0,20587178 0,76987197]
 [0,0092076 0,0044617 0,04673518]
 [ 0,69569363 0,3315923 0,15093861]]
печать (X0)
[[ 1. ]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]
 [ 1.]]
печать (Xновый)
[[ 0,78614426 0,24150772 0,94330932 1. ]
 [ 0,60088812 0,20427371 0,19453546 1. ]
 [ 0,31853252 0,31669057 0,82782995 1. ]
 [ 0,71749368 0,54609844 0,74924888 1. ]
 [ 0,86883981 0,54634575 0,83232409 1. ]
 [ 0,89313181 0,8006561 0,05072146 1. ]
 [ 0,79492088 0,07750024 0,45762175 1. ]
 [ 0,92350837 0,20587178 0,76987197 1. ]
 [ 0,0092076 0,0044617 0,04673518 1. ]
 [ 0,69569363 0,3315923 0,15093861 1. ]]
 

2

Я нашел функцию numpy.c_ очень удобной для добавления столбца в матрицу. Следующий код добавит в матрицу столбец со всеми нулями.

 импортировать numpy как np
np.c_[np.ones((100,1)),X]
 

Здесь X — исходная матрица.

 данные = np.loadtxt («ex1data1.txt», разделитель = ',')
Х=данные[:,0]
Y=данные[:,1]
X = (np.column_stack ((np.ones (np.size (X)), X)))
 

печать x дает

 [[ 1.  6.1101]
 [ 1. 5.5277]
 [ 1. 8.5186]
 [ 1. 7.0032]
 [ 1. 5.8598]
 [ 1. 8.3829]
 [ 1. 7.4764]
 [ 1. 8.5781]
 [ 1. 6.4862]
 [ 1. 5.0546]
 [ 1. 5.7107]
 [ 1. 14.164 ]
 [ 1. 5.734 ]
 [ 1. 8.4084]
 [ 1. 5.6407]
 [ 1. 5,3794]
 [ 1. 6.3654]
 [ 1. 5.1301]
 [ 1. 6.4296]
 [ 1. 7.0708]
 [1.6.1891]
 [ 1. 20.27 ]
 [ 1. 5.4901]
 [ 1. 6.3261]
 [ 1. 5.5649]
 [ 1. 18,945 ]
 [ 1. 12,828 ]
 [ 1. 10,957 ]
 [ 1. 13.176 ]
 [ 1. 22.203 ]
 [ 1. 5.2524]
 [ 1. 6,5894]
 [1.9.2482]
 [ 1. 5.8918]
 [ 1. 8.2111]
 [ 1. 7,9334]
 [ 1. 8.0959]
 [ 1. 5.6063]
 [ 1. 12,836 ]
 [ 1. 6.3534]
 [ 1. 5.4069]
 [ 1. 6,8825]
 [ 1. 11.708 ]
 [ 1. 5.7737]
 [ 1. 7,8247]
 [ 1. 7.0931]
 [ 1. 5.0702]
 [ 1. 5.8014]
 [ 1. 11.7 ]
 [ 1. 5.5416]
 [ 1. 7.5402]
 [ 1. 5.3077]
 [ 1. 7.4239]
 [ 1. 7.6031]
 [ 1. 6.3328]
 [ 1. 6.3589]
 [ 1. 6.2742]
 [ 1. 5.6397]
 [ 1. 9.3102]
 [ 1. 9.4536]
 [ 1. 8.8254]
 [1.5.1793]
 [ 1. 21.279 ]
 [ 1. 14.908 ]
 [ 1. 18,959 ]
 [ 1. 7.2182]
 [ 1. 8.2951]
 [ 1. 10.236 ]
 [ 1. 5.4994]
 [ 1. 20.341 ]
 [ 1. 10.136 ]
 [ 1.  7.3345]
 [ 1. 6.0062]
 [ 1. 7.2259]
 [ 1. 5.0269]
 [ 1. 6,5479]
 [ 1. 7,5386]
 [ 1. 5.0365]
 [ 1. 10.274 ]
 [ 1. 5.1077]
 [ 1. 5.7292]
 [1.5.1884]
 [ 1. 6.3557]
 [ 1. 9,7687]
 [ 1. 6.5159]
 [ 1. 8.5172]
 [1.9.1802]
 [ 1. 6.002 ]
 [ 1. 5.5204]
 [ 1. 5.0594]
 [ 1. 5.7077]
 [ 1. 7,6366]
 [ 1. 5.8707]
 [ 1. 5.3054]
 [ 1. 8.2934]
 [ 1. 13.394 ]
 [ 1. 5.4369]]
 

Я обнаружил, что column_stack работает безупречно… надеюсь, это поможет

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Обязательно, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

python – Как добавить столбец в массив numpy

Я думаю, что ваша проблема в том, что вы ожидаете, что np. append добавит столбец на место, но то, что он делает, из-за того, как хранятся данные numpy, создает копия соединенных массивов

 Возврат
-------
добавить: ндаррай
    Копия arr со значениями, добавленными к оси. Обратите внимание, что `добавить`
    не происходит на месте: выделяется и заполняется новый массив. Если
    «ось» — None, «out» — сглаженный массив.
 

поэтому вам нужно сохранить вывод all_data = np.append(...) :

 my_data = np.random.random((210,8)) #recfromcsv('LIAB.ST.csv', разделитель ='\т')
new_col = my_data.sum(1)[...,None] # None сохраняет (n, 1) форму
new_col.shape
#(210,1)
all_data = np.append (my_data, new_col, 1)
all_data.shape
#(210,9)
 

Альтернативные способы:

 all_data = np.hstack((my_data, new_col))
#или
all_data = np.concatenate((my_data, new_col), 1)
 

Я считаю, что единственная разница между этими тремя функциями (а также np.vstack ) заключается в их поведении по умолчанию, когда ось не указана:

  • hstack предполагает, что ось = 1 , если входные данные не равны 1d, тогда ось = 0
  • vstack предполагает, что ось = 0 после добавления оси, если входные данные равны 1d
  • добавление выравнивание массива

  • Основываясь на вашем комментарии и более внимательно изучив ваш пример кода, я теперь считаю, что вы, вероятно, хотите добавить поле в массив записей . Вы импортировали как genfromtxt , который возвращает структурированный массив , так и recfromcsv , который возвращает слегка отличающийся массив записей ( recarray ). Вы использовали recfromcsv , поэтому прямо сейчас my_data на самом деле является recarray , что означает, что, скорее всего, my_data.shape = (210,) , поскольку recarrays — это одномерные массивы записей, где каждая запись представляет собой кортеж с заданный тип.

    Итак, вы можете попробовать это:

     импортировать numpy как np
    из numpy.lib.recfunctions импортировать append_fields
    х = np.random.random (10)
    у = np.random.random (10)
    г = np.random.random (10)
    данные = np.array (список (zip (x, y, z)), dtype = [('x', float), ('y', float), ('z', float)])
    данные = np.recarray (data.shape, data.dtype, buf = данные)
    данные.форма
    #(10,)
    tot = data['x'] + data['y'] + data['z'] # sum(axis=1) не будет работать при повторном переносе
    тот. форма
    #(10,)
    all_data = append_fields(данные, 'всего', tot, usemask=False)
    все данные
    #массив([(0.4374783740738456 , 0.04307289878861764, 0,021176067323686598, 0,5017273401861498),
    # (0,07622262416466963, 0,3962146058689695, 0,27912715826653534, 0,7515643883001745),
    # (0.30878532523061153, 0.8553768789387086, 0.9577415585116588, 2.121903762680979),
    # (0,5288343561208022, 0,17048864443625933, 0,07915689716226904, 0,7784798977193306),
    # (0.8804269791375121, 0.45517504750917714, 0.1601389248542675, 1.4957409515009568),
    # (0,9556552723429782, 0,8884504475

    3, 0,6412854758843308, 2,4853911958174133), # (0,0227638618687922, 0,9295332854783015, 0,3234597575660103, 1,275756904913104), # (0,684075052174589, 0,6654774682866273, 0,5246593820025259, 1,8742119024637423), # (0,9841793718333871, 0,5813955915551511, 0,39577520705133684, 1,961350170439875), # (0.9889343795296571, 0.22830104497714432, 0.20011292764078448, 1.4173483521475858)], # dtype=[('x', '

    Оставить комментарий