为了账号安全,请及时绑定邮箱和手机立即绑定

使用 numpy 过滤值

使用 numpy 过滤值

浮云间 2022-06-22 22:08:31
我有一个 numpy 零矩阵和 size = (4, 8)x = [[0, 0, 0 , 0, 0, 0, 0, 0],     [0, 0, 0 , 0, 0, 0, 0, 0],     [0, 0, 0 , 0, 0, 0, 0, 0],     [0, 0, 0 , 0, 0, 0, 0, 0],]另外,我有三个不同的矩阵。a = [[1, 1, 1 , 1, 1, 1, 1, 1],     [1, 1, 1 , 1, 1, 1, 1, 1],     [1, 1, 1 , 1, 1, 1, 1, 1],     [1, 1, 1 , 1, 1, 1, 1, 1],]b = [[2, 2, 2 , 2, 2, 2, 2, 2],     [2, 2, 2 , 2, 2, 2, 2, 2],     [2, 2, 2 , 2, 2, 2, 2, 2],     [2, 2, 2 , 2, 2, 2, 2, 2],] c = [[3, 3, 3 , 3, 3, 3, 3, 3],     [3, 3, 3 , 3, 3, 3, 3, 3],     [3, 3, 3 , 3, 3, 3, 3, 3],     [3, 3, 3 , 3, 3, 3, 3, 3],]我想得到以下结果output = [[1, 2, 1, 2, 1, 2, 1, 2],          [2, 3, 2, 3, 2, 3, 2, 3],          [1, 2, 1, 2, 1, 2, 1, 2],          [2, 3, 2, 3, 2, 3, 2, 3],]矩阵 a的值出现在 (row 0, row 2) 和 (column 0, column 2, column 4, column 6)矩阵 b的值出现在第 0 行、第 1 行、第 2 行、第 3 行,但在第 0 行和第 2 行中,值 2 出现在第 1 列、第 3 列、第 5 列、第 7 列、第 1 行的下一个第 3 行的值 2 出现在第 0 列、第 2 列、第 4 列、第 6 列矩阵 c的值出现在 (row 1, row 3) 和 (column 1, column 3, column 5, column 7)import numpy as nph, w = x.shapeoutput = np.zeros((h, w))for i in range(h):    for j in range(w):        if (i % 2) == 0 and (j % 2) == 0:            output[i, j] = a[i, j]        elif (i % 2) == 1 and (j % 2) == 1:            output[i, j] = c[i, j]        else:            output[i, j] = b[i, j]print(output)'''  output = [[1. 2. 1. 2. 1. 2. 1. 2.]          [2. 3. 2. 3. 2. 3. 2. 3.]          [1. 2. 1. 2. 1. 2. 1. 2.]          [2. 3. 2. 3. 2. 3. 2. 3.]]'''我想尽量不使用for循环,可以用numpy解决吗?
查看完整描述

2 回答

?
繁花不似锦

TA贡献1851条经验 获得超4个赞

您可以使用np.choose:


y,x = np.ogrid[:4,:8]

np.choose((y&1)+(x&1),[a,b,c])

# array([[1, 2, 1, 2, 1, 2, 1, 2],

#        [2, 3, 2, 3, 2, 3, 2, 3],

#        [1, 2, 1, 2, 1, 2, 1, 2],

#        [2, 3, 2, 3, 2, 3, 2, 3]])


查看完整回答
反对 回复 2022-06-22
?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

您需要选择行和列分别为奇数/偶数的索引。这里已经解释过了


import numpy as np

b = np.ones((4,8))*2


# update places where both row & column are even

b[::2,::2] -= 1

# update places where both row & column are odd

b[1::2,1::2] += 1


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信