我有一个 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]])
泛舟湖上清波郎朗
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
添加回答
举报
0/150
提交
取消