3d numpy array只对第1列执行操作



我有一个像这样的3d numpy数组(作为一个例子)

a = np.array([
[[1, -2, 3, 4],[5, 6, 7, 8]],
[[9, 10, 11, 12],[13, 14, 15, 16]]
])

我只想将以下操作应用于内维索引为1的列中的元素。这些元素是上面示例中的[-2,6,10,14]。操作将是:

# variables used in the operations
v1, v2, v3 = 12, 4, 2
# the following two operations should only be applied to specified column across all the array
# 1st operation
a[a >= v1] = v1
# output
a = np.array([
[[1, -2, 3, 4],[5, 6, 7, 8]],
[[9, 10, 11, 12],[13, 12, 15, 16]]
])
# 2nd operation
f = lambda x: -2 if(x==-2) else (x-v3)/(v2-v3)
a = f(a)
# output
a = np.array([
[[1, -2, 3, 4],[5, 2, 7, 8]],
[[9, 4, 11, 12],[13, 5, 15, 16]]
])

有人能帮帮我吗?我已经研究了几个NumPy方法,但似乎不能适应我的例子。

您需要将您的函数更改为矢量(即接受数组和输入并返回数组作为输出),并切片仅将其应用于所需的"列"

f = lambda x: np.where(x==-2, -2, (x-v3)/(v2-v3))
a[...,[1]] = f(a[...,[1]])

输出:

array([[[ 1, -2,  3,  4],
[ 5,  2,  7,  8]],
[[ 9,  4, 11, 12],
[13,  5, 15, 16]]])
a = np.array([
[[1, -2, 3, 4],[5, 6, 7, 8]],
[[9, 10, 11, 12],[13, 14, 15, 16]]
])
print(a.trasnpose()[1]).reshape(1,4)

将打印:

[[-2 10  6 14]]

a.transpose()[1].flatten()

将打印:

[-2 10  6 14]

你可以在上面做你的操作

最新更新