我有一個代碼片段,它通過一個一個地填充上層元素并隨后填充下層元素來創建一個矩陣(如果上層元素是x那么下層元素1/x)
n = 4
m = np.ones([n, n])
for i in range(0,n):
for j in range(0,n):
if i < j:
x = input()
m[i, j] = float(x)
m[j, i] = 1 / float(x)
在第二個代碼中,我可以一次填充矩陣,但我需要從左上角到右下角逐行填充元素
n = int(input())
entries = list(map(int, input().split()))
matrix = np.array(entries).reshape(n, n)
我的問題是:有什么辦法可以像第一個片段一樣首先填充矩陣的上三角形,但只能像第二個片段一樣輸入一次串列?
前任。
n = 3
輸入 = 2 3 4(串列)
Expected output=
[[1. 2. 3. ]
[0.5 1. 4. ]
[0.33333333 0.25 1. ]]
uj5u.com熱心網友回復:
np.triu_indices和np.tril_indices是你的朋友在這里。這些函式提供矩陣的上三角或下三角的索引。您可以使用索引將您的平面串列分配到您想要的矩陣部分:
n = int(input())
entries = np.array(list(map(int, input().split())))
matrix = np.ones((n, n))
matrix[np.triu_indices(n, 1)] = entries
matrix[np.tril_indices(n, -1)] = 1 / entries
由于您的矩陣是方形的,因此同時提供n和串列是多余的,因為串列的長度必須是一個三角形數。len(entries) = (n**2 - n) / 2,只有當1 8 * len(entries)是奇完全平方時才有有效的整數解:
entries = np.array(list(map(int, input().split())))
d = np.sqrt(1 8 * entries.size)
if np.round(d) != d or d % 2:
raise ValueError('invalid number of entries')
n = (d 1) // 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/345545.html
上一篇:根據兩列的值添加另一列
