CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.
Bài đăng trên blog CFSDN này giải thích chi tiết về nguyên lý/cơ chế phát sóng trong Numpy. Bài đăng được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, vui lòng thích.
Nguyên tắc phát sóng.
Hai mảng được coi là tương thích với phát sóng nếu các chiều theo sau của chúng (các chiều bắt đầu từ cuối) có cùng độ dài trục hoặc nếu một trong số chúng có độ dài là 1. Phát sóng xảy ra trên các chiều bị thiếu và/hoặc các chiều có độ dài trục là 1.
Trong ví dụ trên, khi giá trị trung bình của cột được trừ đi khỏi mỗi cột của arr, chiều theo sau của arr là 3 và chiều theo sau của arr.mean(0) cũng là 3, thỏa mãn điều kiện khớp độ dài trục và việc phát sóng sẽ được thực hiện trên chiều bị thiếu.
Điều hơi lạ ở đây là chiều bị thiếu không phải là axis=1 mà là axis=0. Theo hiểu biết cá nhân của tôi thì chiều bị thiếu là chiều mà hai mảng khớp với nhau ngoài chiều dài trục. Trong ví dụ trên, nó là axis=0. Hoan nghênh những sửa đổi về điểm này.
arr.mean(0) được phát sóng theo trục = 0, có thể được coi là sao chép arr.mean(0) bốn lần theo hướng dọc. Nghĩa là, khi phát sóng, arr.mean(0) tương đương với một mảng có hình dạng = (4,3), và mỗi hàng của mảng đều giống nhau, đó là arr.mean(0).
Để hiểu nguyên tắc này, trước tiên chúng ta hãy xem một số ví dụ sau:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
hai mươi mốt
hai mươi hai
hai mươi ba
hai mươi bốn
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
TRONG [
12
]:
nhập khẩu
numpy như np
TRONG [
13
]: Một
=
np.arange(
1
,
13
).Định hình lại((
4
,
3
))
TRONG [
14
]: Một
*
2
Ngoài[
14
]: mảng([[
2
,
4
,
6
],
[
8
,
10
,
12
],
[
14
,
16
,
18
],
[
20
,
hai mươi hai
,
hai mươi bốn
]])
TRONG [
17
]: b
=
np.arange(
12
,
hai mươi bốn
).Định hình lại((
4
,
3
))
TRONG [
18
]: b
Ngoài[
18
]: mảng([[
12
,
13
,
14
],
[
15
,
16
,
17
],
[
18
,
19
,
20
],
[
hai mươi mốt
,
hai mươi hai
,
hai mươi ba
]])
TRONG [
19
]: Một
+
b
Ngoài[
19
]: mảng([[
13
,
15
,
17
],
[
19
,
hai mươi mốt
,
hai mươi ba
],
[
25
,
27
,
29
],
[
31
,
33
,
35
]])
TRONG [
20
]: c
=
np. mảng([
1
,
2
,
3
])
TRONG [
hai mươi mốt
]: Một
+
c
Ngoài[
hai mươi mốt
]: mảng([[
2
,
4
,
6
],
[
5
,
7
,
9
],
[
8
,
10
,
12
],
[
11
,
13
,
15
]])
TRONG [
hai mươi hai
]:đ
=
np.arange(
10
,
14
).Định hình lại((
4
,
1
))
TRONG [
hai mươi ba
]:đ
Ngoài[
hai mươi ba
]: mảng([[
10
],
[
11
],
[
12
],
[
13
]])
TRONG [
hai mươi bốn
]: Một
+
ngày
Ngoài[
hai mươi bốn
]: mảng([[
11
,
12
,
13
],
[
15
,
16
,
17
],
[
19
,
20
,
hai mươi mốt
],
[
hai mươi ba
,
hai mươi bốn
,
25
]])
|
Tại sao lại thế? Ở đây chúng ta cần đề cập đến nguyên tắc phát sóng của numpy:
Hai mảng được coi là tương thích với phát sóng nếu các chiều theo sau của chúng (các chiều bắt đầu từ cuối) có cùng độ dài trục hoặc nếu một trong số chúng có độ dài là 1. Phát sóng xảy ra trên các chiều bị thiếu và/hoặc các chiều có độ dài trục là 1.
Trong đoạn mã trên, chiều của a là (4, 3), chiều của c là (1, 3) và chiều của d là (4, 1). Vì vậy, giả sử có hai mảng, mảng đầu tiên có kích thước (x_1, y_1, z_1), và mảng kia có kích thước (x_2, y_2, z_2). Để xác định xem hai mảng này có thể được tính toán hay không, chúng ta có thể sử dụng phương pháp sau để xác định:
?
1
2
3
4
5
6
7
8
9
10
|
nếu như
z_1
=
=
z_2
hoặc
z_1
=
=
1
hoặc
z_2
=
=
1
:
nếu như
y_1
=
=
y_2
hoặc
y_1
=
=
1
hoặc
y_2
=
=
1
:
nếu như
x_1
=
=
x_2
hoặc
x_1
=
=
1
hoặc
x_2
=
=
1
:
Có thể tính toán được
khác
:
Không thể hoạt động
khác
:
Không thể hoạt động
khác
:
Không thể hoạt động
|
Cần lưu ý ở đây rằng (3, 3, 2) và (3, 2) có thể được vận hành, vì mảng hai chiều (3, 2) cũng có thể được biểu thị là (1, 3, 2) và các quy tắc trên hoàn toàn có thể áp dụng. Tương tự như vậy, (4, 2, 5, 4) và (2, 1, 4) cũng có thể được vận hành.
Trên đây là toàn bộ nội dung bài viết này, hy vọng sẽ giúp ích cho việc học tập của mọi người, và mong các bạn ủng hộ tôi.
Liên kết gốc: https://segmentfault.com/a/1190000016460482.
Cuối cùng, bài viết này về giải thích chi tiết về nguyên lý/cơ chế phát sóng trong Numpy kết thúc tại đây. Nếu bạn muốn biết thêm về giải thích chi tiết về nguyên lý/cơ chế phát sóng trong Numpy, vui lòng tìm kiếm các bài viết CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!