我确信之前已经有人问过这个问题,但是我找不到我期待的内容。根据另一列的行值创建列。
我有一个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