繁体   English   中英

3d numpy 数组仅沿列 i 执行操作

[英]3d numpy array perform operation along column i only

我有一个像这样的 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]

比你可以对它进行操作

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM