假設我有一個NxN矩陣(df)。我想用0來填充df的所有對角線。有沒有一個簡單的方法來做到這一點?熊貓:填充矩陣對角線
-2
A
回答
1
你可以使用np.eye(n)
:
pd.DataFrame(np.eye(5) * np.array([1, 2, 3, 4, 5]))
0
考慮數據框df
df = pd.DataFrame(np.random.randint(10, size=[5, 5]), list('ABCDE'), list('VWXYZ'))
print(df)
V W X Y Z
A 4 6 7 5 4
B 9 7 3 3 0
C 1 9 7 8 2
D 1 9 7 9 9
E 6 6 6 6 1
np.eye
df.mul(np.eye(len(df), dtype=int))
V W X Y Z
A 4 0 0 0 0
B 0 7 0 0 0
C 0 0 7 0 0
D 0 0 0 9 0
E 0 0 0 0 1
重構
填充在對角線
z = np.zeros_like(df)
r = np.arange(len(df))
z[r, r] = df.values[r, r]
pd.DataFrame(z, df.index, df.columns)
V W X Y Z
A 4 0 0 0 0
B 0 7 0 0 0
C 0 0 7 0 0
D 0 0 0 9 0
E 0 0 0 0 1
np.triu_indices
填寫關閉對角線
i, j = np.triu_indices(len(df), 1)
df.values[i, j] = 0
df.values[j, i] = 0
df
V W X Y Z
A 4 0 0 0 0
B 0 7 0 0 0
C 0 0 7 0 0
D 0 0 0 9 0
E 0 0 0 0 1
0
一種方法是使用fill_diagonal
從舊矩陣填充對角線的新零矩陣。
import numpy as np
A = np.array([[1,2], [3,4]])
A_d = np.zeros_like(A)
np.fill_diagonal(A_d, A.diagonal())
# A_d
# array([[1, 0],
# [0, 4]])
1
np.diag應該是足夠了:
df = pd.DataFrame(np.random.randint(7, size=[6, 6]))
np.diag(np.diag(df))
array([[5, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 0, 0],
[0, 0, 0, 0, 3, 0],
[0, 0, 0, 0, 0, 3]])
相關問題
- 1. 填充陣列對角線
- 2. 爲每個python numpy填充不同值的矩陣對角線
- 3. 對角線反映矩陣
- 4. 填充python矩陣
- 5. 零填充矩陣
- 6. 跨大塊熊貓填充
- 7. python熊貓右填充值
- 8. 如何使矩陣的對角線等於另一個矩陣的對角線?
- 9. 基於矩陣列表填充矩陣
- 10. Python:陣列(矩陣)到熊貓DataFrame
- 11. 在蟒蛇100×100的矩陣中,填充掉對角線元素
- 12. 如何使用python中的字符串填充矩陣的對角線?
- 13. 貓鼬從填充陣列
- 14. 貓鼬填充陣列
- 15. 貓鼬:填充陣列
- 16. 從MATLAB矩陣陣列創建對角線矩陣
- 17. 填充垂直矩陣Java
- 18. 'nlfilter'如何填充矩陣?
- 19. 在java中填充矩陣
- 20. 填充矩陣proc iml SAS
- 21. 使用namedtuples填充矩陣
- 22. Matlab填充矩陣數組
- 23. Python中的多列填充熊貓熊貓
- 24. 矩陣具有相同的對角線
- 25. 矩陣列表的塊對角線
- 26. 如何排序矩陣對角線
- 27. 主對角線矩陣的總和JAVA
- 28. 矩陣中的對角線-python
- 29. 打印對角線的矩陣
- 30. 更改矩陣數組的對角線
這是很聰明的。 – trob