[Python][NumPy] Macierze

xdominika
Użytkownik
Użytkownik
Posty: 81
Rejestracja: 14 lis 2019, o 22:59
Płeć: Kobieta
wiek: 19
Podziękował: 23 razy

[Python][NumPy] Macierze

Post autor: xdominika » 16 lis 2021, o 21:47

Witam wszystkich. Mam pewien problem, mianowicie muszę stworzyć, korzystając z modułu random, trzy wektory o tej samej długości. Z tym nie mam problemu, ale potem mam zamieścić je w jednej trójwymiarowej macierzy, a następnie rozpoznać, na której osi są umieszczone dane wektory. W jaki sposób można to rozpoznać?
Ostatnio zmieniony 27 lis 2021, o 00:25 przez Afish, łącznie zmieniany 1 raz.
Powód: Poprawa wiadomości.

Ponury123
Użytkownik
Użytkownik
Posty: 116
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 19 razy

Re: Python - macierze - NumPy

Post autor: Ponury123 » 18 lis 2021, o 17:42

Jeśli długość wektorów jest inna niż 3 to łatwo, w przeciwnym razie nie mam pomysłu jak to sprawdzić. Jakby to był secure random to można by coś kombinować czy dany układ jest wystarczająco silny, ale z zwykłym random brak pomysłów.

kubadt
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 28 gru 2017, o 19:56
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 1 raz

Re: Python - macierze - NumPy

Post autor: kubadt » 21 lis 2021, o 08:05

Według mnie zadanie nie ma większego sensu. Do tego, aby umieścić wektory w macierzy użyjemy jednej z metod:
- hstack
- vstack
- append

Bez względu na to, której metody użyjemy podczas umieszczania wektorów wewnątrz tej macierzy definiujemy na której z osi mają one się znaleźć. Jeżeli już koniecznie chcemy programowo ustalić która z osi zawiera te wektory możemy posłużyć się atrybutem shape. Atrybut shape ma strukturę krotki składającej się z rozmiarów poszczególnych osi macierzy. Korzystając z operacji modulo możemy łatwo ustalić, która z metod została użyta.

Ponury123
Użytkownik
Użytkownik
Posty: 116
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 19 razy

Re: Python - macierze - NumPy

Post autor: Ponury123 » 21 lis 2021, o 19:00

kubadt pisze:
21 lis 2021, o 08:05
Atrybut shape ma strukturę krotki składającej się z rozmiarów poszczególnych osi macierzy.
A masz jakiś pomysł jak to ustalić kiedy osie są równe? Trzy wektory o długości 3.

kubadt
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 28 gru 2017, o 19:56
Płeć: Mężczyzna
Lokalizacja: Polska
Pomógł: 1 raz

Re: Python - macierze - NumPy

Post autor: kubadt » 24 lis 2021, o 13:46

Ponury123 pisze:
21 lis 2021, o 19:00
kubadt pisze:
21 lis 2021, o 08:05
Atrybut shape ma strukturę krotki składającej się z rozmiarów poszczególnych osi macierzy.
A masz jakiś pomysł jak to ustalić kiedy osie są równe? Trzy wektory o długości 3.
Tak. Otóż, jeżeli wszystkie wektory znajdują się na osi 1, krotka shape będzie miała wartość (1,9). W przypadku, gdy będą one wpisane na osi 0, krotka będzie miała wartość (3,3). Można popełnić błąd myślowy, polegający na pomyleniu osi "macierzy" (a tak naprawdę tensora rzędu 2), z transpozycją tej "macierzy". Wektory nigdy nie zostaną wpisane jako transponowane, o ile tej transpozycji bezpośrednio nie wyrazimy. Poniżej kilka przykładów.

Kod: Zaznacz cały

import numpy as np

v1 = np.random.random(3)
v2 = np.random.random(3)
v3 = np.random.random(3)

m1 = np.array([[v1],[v2],[v3]]) #wektory na osi 0, tensor 3 rzędu
m2 = np.array([v1,v2,v3]) #wektory na osi 0, tensor 2 rzędu ("macierz")
m3 = np.vstack([v1,np.vstack([v2,v3])]) #wektory na osi 0, tensor 2 rzędu ("macierz")
m4 = np.hstack([v1,np.hstack([v2,v3])]) #wektory na osi 0, tensor 1 rzędu ("wektor")
m5 = np.append(np.array([v1]),np.append(np.array([v2]),np.array([v3]), axis = 1), axis = 1) #wektory na osi 1, tensor 2 rzędu ("macierz")
m6 = np.append(np.array([v1]),np.append(np.array([v2]),np.array([v3]), axis = 0), axis = 0) #wektory na osi 0, tensor 2 rzędu ("macierz")

print(m1.shape)
print(m1)
print(m2.shape)
print(m2)
print(m3.shape)
print(m3)
print(m4.shape)
print(m4)
print(m5.shape)
print(m5)
print(m6.shape)
print(m6)
output

Kod: Zaznacz cały

(3, 1, 3)
[[[0.18355889 0.36373735 0.92515974]]

 [[0.63372584 0.95619418 0.81640724]]

 [[0.88232588 0.76941389 0.612795  ]]]
(3, 3)
[[0.18355889 0.36373735 0.92515974]
 [0.63372584 0.95619418 0.81640724]
 [0.88232588 0.76941389 0.612795  ]]
(3, 3)
[[0.18355889 0.36373735 0.92515974]
 [0.63372584 0.95619418 0.81640724]
 [0.88232588 0.76941389 0.612795  ]]
(9,)
[0.18355889 0.36373735 0.92515974 0.63372584 0.95619418 0.81640724
 0.88232588 0.76941389 0.612795  ]
(1, 9)
[[0.18355889 0.36373735 0.92515974 0.63372584 0.95619418 0.81640724
  0.88232588 0.76941389 0.612795  ]]
(3, 3)
[[0.18355889 0.36373735 0.92515974]
 [0.63372584 0.95619418 0.81640724]
 [0.88232588 0.76941389 0.612795  ]]

Ponury123
Użytkownik
Użytkownik
Posty: 116
Rejestracja: 5 lip 2015, o 14:48
Płeć: Mężczyzna
Lokalizacja: nie wiem
Podziękował: 11 razy
Pomógł: 19 razy

Re: Python - macierze - NumPy

Post autor: Ponury123 » 26 lis 2021, o 13:43

Trochę inaczej zrozumiałem treść zadania, ale nie znam się na pythonie więc kłócił się nie będę, fajnie, że to rozpisałeś, dziękuję za Twój czas ;)

ODPOWIEDZ