我確信之前已經有人問過這個問題,但是我找不到我期待的內容。根據另一列的行值創建列。
我有一個np.array,我想創建一個額外的列(C2),其值依賴於另一列(C1)。
在僞代碼中,我想作一列,其中(J = 2:N):
R1C1 = R1C2
IF | RJ-1C2 - RjC1 | < 20 THEN RjC2 = RJ-1C2
否則RjC2 = RjC1
我很新的蟒蛇,但我敢肯定,這是非常簡單的。我基本上只需要知道如何將此公式插入到np.array的python中。
謝謝
我確信之前已經有人問過這個問題,但是我找不到我期待的內容。根據另一列的行值創建列。
我有一個np.array,我想創建一個額外的列(C2),其值依賴於另一列(C1)。
在僞代碼中,我想作一列,其中(J = 2:N):
R1C1 = R1C2
IF | RJ-1C2 - RjC1 | < 20 THEN RjC2 = RJ-1C2
否則RjC2 = RjC1
我很新的蟒蛇,但我敢肯定,這是非常簡單的。我基本上只需要知道如何將此公式插入到np.array的python中。
謝謝
這是非常具體的。不確定有一個簡單的公式,因爲您遞歸地生成列而不是使用現有數據。你可以做以下,其中a
是你的舊列和b
的指標是要填寫列的索引:
arr[0, b] = arr[0, a]
for j in range(1, n):
arr[j, b] = arr[j - 1, b] if abs(arr[j - 1, b] - arr[j, a]) < 20 else arr[j, a]
我將使用零指數(即0行作爲第一行,第一行是第二行,第0列是第一列,第一列是第二列等),以便於解釋和代碼實現。
說我們有一個numpy的數組像這樣(稱之爲陣列a
) - 按您的規格,在第一行兩列是相同的。
a = np.array(
[
[10, 10],
[15, None],
[50, None]
]
)
n
爲3(行數)。j
取指數1
(含)至n
(不含)的範圍。對於我們的虛擬示例,j
將是1
,2
。 (即2個循環)注意numpy的索引看起來像這樣:
a[0][1]
意味着第一行(行0),第二列(列1)。a[1][1]
表示第二行(第1行),第二列(第1列)。的病症:
if abs(a[j-1][1] - a[j][0]) < 20
...然後a[j][1] = a[j-1][1]
a[j][1] = a[j][0]
即預期成果:
[
[10, 10],
[15, 10],
[50, 50]
]
這是一個直numpy的實施
import numpy as np
# Create a sample numpy array as per specification
a = np.array(
[
[10, 10],
[15, None],
[50, None]
]
)
# get number of rows there are for looping upper bound
# for our dummy example, n = 3
n = a.shape[0]
# do the loop
for j in range(1, n):
if abs(a[j-1][1] - a[j][0]) < 20:
a[j][1] = a[j-1][1]
else:
a[j][1] = a[j][0]
# the array `a` is now is now updated to...
# array([[10, 10],
# [15, 10],
# [50, 50]], dtype=object)
另外,我建議你重新命名從最初的問題:
創建列基於另一列的行值。
新:
更新列基於其他列的列值。
...因爲你總是隻有兩列(但可以是多行)
這很有效。我知道這有點不相關,但是如何將'n'標記爲np.array中的行數? –
'n,_ = arr.shape' – csander