Trăn nhân ma trận

Tùy thuộc vào việc lập chỉ mục, việc xây dựng ma trận trích xuất/lập chỉ mục với kiểu đầu vào

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

3 có thể dễ dàng hơn

In [129]: from scipy import sparse
In [130]: M = sparse.csr_matrix[np.arange[16].reshape[4,4]]
In [131]: M
Out[131]: 

In [132]: M.A
Out[132]: 
array[[[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]]]

Ma trận trích xuất vuông với các giá trị "đường chéo" mong muốn

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

Nhân ma trận một chiều chọn cột

In [135]: [email protected]
Out[135]: 

In [136]: _.A
Out[136]: 
array[[[ 0,  0,  0,  3],
       [ 4,  0,  0,  7],
       [ 8,  0,  0, 11],
       [12,  0,  0, 15]]]

và mặt khác, các hàng

In [137]: [email protected]
Out[137]: 

In [138]: _.A
Out[138]: 
array[[[ 0,  1,  2,  3],
       [ 0,  0,  0,  0],
       [ 0,  0,  0,  0],
       [12, 13, 14, 15]]]
In [139]: extractor.A
Out[139]: 
array[[[1, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 0],
       [0, 0, 0, 1]]]

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

4 làm điều tương tự, nhưng với

In [140]: extractor = sparse.csr_matrix[[[1,1],[[0,1],[0,3]]]]
In [142]: [[email protected]].A
Out[142]: 
array[[[ 0,  1,  2,  3],
       [12, 13, 14, 15]]]

Tổng hàng và cột cũng được thực hiện với phép nhân ma trận

In [149]: [4,int]
Out[149]: array[[ 6, 22, 38, 54]]

Đôi khi, khi làm việc với các ma trận thưa thớt lớn trong Python, bạn có thể muốn chọn một số hàng của ma trận thưa thớt hoặc một số cột nhất định của ma trận thưa thớt. Như chúng ta đã thấy trước đó, có nhiều loại ma trận thưa thớt có sẵn trong SciPy bằng Python. Mỗi loại ma trận thưa thớt được tối ưu hóa cho các hoạt động cụ thể

Chúng ta sẽ xem các ví dụ về việc cắt một ma trận thưa thớt theo hàng và cột. Về cơ bản, chúng tôi sẽ tạo một ma trận thưa thớt ngẫu nhiên và chọn một tập hợp con các hàng hoặc cột từ ma trận thưa thớt bằng cách sử dụng Scipy/NumPy trong Python

Hãy để chúng tôi tải các mô-đun cần thiết

________số 8

Hãy để chúng tôi tạo một ma trận ngẫu nhiên thưa thớt bằng cách sử dụng chức năng ngẫu nhiên của mô-đun thưa thớt của SciPy. Ở đây, chúng tôi tạo ma trận ngẫu nhiên thưa thớt có kích thước 5 x 5 chứa các số ngẫu nhiên từ phân phối Poisson

A = sparse.random[5, 5,
                  density=0.5,
                  data_rvs=stats.poisson[10, loc=10].rvs]

Chúng ta có thể thấy nội dung của ma trận thưa bằng câu lệnh in và hàm todense[]

In [129]: from scipy import sparse
In [130]: M = sparse.csr_matrix[np.arange[16].reshape[4,4]]
In [131]: M
Out[131]: 

In [132]: M.A
Out[132]: 
array[[[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]]]
0

Giả sử chúng ta quan tâm đến các hàng hoặc cột có chỉ số chẵn

In [129]: from scipy import sparse
In [130]: M = sparse.csr_matrix[np.arange[16].reshape[4,4]]
In [131]: M
Out[131]: 

In [132]: M.A
Out[132]: 
array[[[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]]]
1

Cách chọn hàng từ ma trận thưa thớt?

Chúng tôi có thể tập hợp ma trận thưa thớt ban đầu của mình bằng cách sử dụng thao tác lát. Điều cần lưu ý là thưa thớt. chức năng ngẫu nhiên tạo ma trận thưa thớt ở định dạng COO theo mặc định. Tuy nhiên, ma trận COO không thân thiện với hoạt động lát

Vì vậy, trước tiên chúng tôi chuyển đổi ma trận thưa thớt COO thành ma trận CSR [Định dạng hàng thưa được nén] bằng cách sử dụng hàm tocsr[]. Và sau đó chúng ta có thể cắt các hàng ma trận thưa thớt bằng cách sử dụng mảng chỉ số hàng mà chúng ta đã tạo

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

0

Chúng ta có thể thấy rằng sau khi cắt, chúng ta có một ma trận thưa thớt có kích thước 3 × 5 ở định dạng CSR. Để xem nội dung của ma trận thưa được cắt lát, chúng ta có thể sử dụng hàm todense[]. Bây giờ chúng tôi chỉ có ba hàng thay vì năm

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

1

Làm cách nào để chọn các cột từ một ma trận thưa thớt?

Chúng ta có thể làm tương tự để cắt các cột của ma trận thưa thớt. Trước tiên, chúng tôi sẽ phải chuyển đổi sang ma trận CSR hoặc CSC, sau đó sử dụng thao tác cắt lát để chọn các cột mà chúng tôi quan tâm

Hãy để chúng tôi sử dụng tocsr[] như trước đây và chọn các cột có chỉ số chẵn

In [133]: extractor = sparse.csr_matrix[[[1,1],[[0,3],[0,3]]]]
In [134]: extractor
Out[134]: 

2

Một tùy chọn khác để cắt các hàng hoặc cột của ma trận thưa thớt không lớn là chuyển đổi thành ma trận dày đặc và cắt các hàng/cột. Rõ ràng cách tiếp cận này là không hiệu quả hoặc không thể thực hiện được khi kích thước ma trận thưa thớt lớn

Chủ Đề