tôi đang tạo ra ma trận đối xứng/mảng trong Python với NumPy, sử dụng một phương pháp tiêu chuẩn:kết quả bất ngờ với + = trên mảng NumPy
x = rand(500,500)
x = (x+x.T)
all(x==x.T)
> True
Bây giờ chúng ta hãy trở nên thông minh:
x = rand(500,500)
x += x.T
all(x==x.T)
> False
Chờ, gì ?
x==x.T
> array([[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
[ True, True, True, ..., False, False, False],
...,
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True],
[False, False, False, ..., True, True, True]], dtype=bool)
Phần trên bên trái và dưới bên phải là đối xứng. Nếu tôi chọn một mảng nhỏ hơn thì sao?
x = rand(50,50)
x += x.T
all(x==x.T)
> True
OK ....
x = rand(90,90)
x += x.T
all(x==x.T)
> True
x = rand(91,91)
x += x.T
all(x==x.T)
> False
Và chỉ để đảm bảo ...
x = rand(91,91)
x = (x+x.T)
all(x==x.T)
> True
Đây có phải là một lỗi, hay tôi về để tìm hiểu điều gì đó điên về +=
và NumPy mảng?
Câu hỏi này cần có tiêu đề phù hợp. – plaes
@AndrewJaffe đây là Numpy 1.9 trên Python 3.4.1, được phân phối trong Anaconda. – jeffalstott
@jeffalstott yep, tôi hiểu sai câu hỏi - Tôi cũng thấy hành vi này. –