假设我有一个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. 对角线反映矩阵
- 3. 填充python矩阵
- 4. 零填充矩阵
- 5. python熊猫右填充值
- 6. 跨大块熊猫填充
- 7. 如何使矩阵的对角线等于另一个矩阵的对角线?
- 8. 猫鼬从填充阵列
- 9. 猫鼬填充阵列
- 10. 猫鼬:填充阵列
- 11. 从MATLAB矩阵阵列创建对角线矩阵
- 12. 在java中填充矩阵
- 13. 'nlfilter'如何填充矩阵?
- 14. 填充矩阵proc iml SAS
- 15. 使用namedtuples填充矩阵
- 16. 主对角线矩阵的总和JAVA
- 17. 任务矩阵和对角线c
- 18. 用Mathematica更改矩阵的对角线
- 19. 打印对角线的矩阵
- 20. 矩阵具有相同的对角线
- 21. 替换矩阵的对角线
- 22. 更改矩阵数组的对角线
- 23. 矩阵列表的块对角线
- 24. 如何排序矩阵对角线
- 25. Python中的多列填充熊猫熊猫
- 26. 从矩阵的一半创建对角线矩阵
- 27. Python熊猫部分坍塌2d矩阵
- 28. 大熊猫分散矩阵的传说
- 29. 熊猫交叉表矩阵点nansum
- 30. 用熊猫计算矩阵的逆
这是很聪明的。 – trob