簡體   English   中英

Function 超過 Python 數組中的每個值(不使用 def)

[英]Function over each value in Python Array (without using def)

輸入數組為 x,尺寸為 (1 x 3),output 數組為 3 x 3(輸入列 x 輸入列)。 output 陣列的對角線是值^2。 如果行,= 列。 那么公式是每個值的 x(row)+x(col)。 目前為 1 x 3,但應假定各種尺寸作為輸入。 不能使用'def',當前代碼不起作用? 你會推薦什么?

x = np.array([[0, 5, 10]])
output array formulas = 
[[i^2,   x(row)+x(col),  x(row)+x(col)]
 [x(row)+x(col), i^2,    x(row)+x(col)]
 [x(row)+x(col), x(row)+x(col),   i^2]]

# where row and column refer to the output matrix row, column. For example, the value in (1,2) is x(1)+x(2)= 5

ideal output = 
[[0 5 10]
 [5 25  15]
 [10 15 100]]

嘗試的代碼:

x = np.array([[0, 5, 10]])
r, c = np.shape(x)
results = np.zeros((c, c))
g[range(c), range(c)] = x**2
for i in x:
    for j in i:
        results[i,j] = x[i]+x[j]

學習使用numpy方法和廣播:

>>> x
array([[ 0,  5, 10]])
>>> x.T
array([[ 0],
       [ 5],
       [10]])
>>> x.T + x
array([[ 0,  5, 10],
       [ 5, 10, 15],
       [10, 15, 20]])
>>> result = x.T + x
>>> result
array([[ 0,  5, 10],
       [ 5, 10, 15],
       [10, 15, 20]])

然后這個方便的內置:

>>> np.fill_diagonal(result, x**2)
>>> result
array([[  0,   5,  10],
       [  5,  25,  15],
       [ 10,  15, 100]])

可以替換results[range(c), range(c)] = x**2

以下是不使用 numpy 的方法:

x = [[0,5,10] for i in range(3)]
output = [[x[i][j]**2 if i == j else x[i][j] for j,b in enumerate(a)] for i,a in enumerate(x)]
print(output)

output:

[[0, 5, 10], [0, 25, 10], [0, 5, 100]]

嘗試這個:

x.repeat(x.shape[1], axis=0)
x = x+x.T
x[np.arange(len(x)),np.arange(len(x))] = (np.diag(x)/2)**2

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM