如何在 Python 中交换 3 维数组中的值?
How to swap values in a 3-d array in Python?
我有一个矩阵 (3x5),其中随机选择了一个数字。我想将所选数字与右下角的数字交换。我能够找到随机选择的数字的索引,但不确定如何将其替换为先下后右的那个。例如,给定矩阵:
[[169 107 229 317 236]
[202 124 114 280 106]
[306 135 396 218 373]]
选择的号码是280(位置[1,3]),需要和[2,4]上的373交换。我在如何移动索引方面遇到问题。我可以对其进行硬编码,但是当随机选择要交换的数字时,它会变得有点复杂。
如果所选数字在 [0,0] 上,则硬编码如下所示:
selected_task = tard_generator1[0,0]
right_swap = tard_generator1[1,1]
tard_generator1[1,1] = selected_task
tard_generator1[0,0] = right_swap
欢迎提出任何建议!
怎么样
chosen = (1, 2)
right_down = chosen[0] + 1, chosen[1] + 1
matrix[chosen], matrix[right_down] = matrix[right_down], matrix[chosen]
将输出:
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> index = (1, 2)
>>> right_down = index[0] + 1, index[1] + 1
>>> a[index], a[right_down] = a[right_down], a[index]
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 13, 8, 9],
[10, 11, 12, 7, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
应该有边界检查但被省略了
试试这个:
import numpy as np
def swap_rdi(mat, index):
row, col = index
rows, cols = mat.shape
assert(row + 1 != rows and col + 1 != cols)
mat[row, col], mat[row+1, col+1] = mat[row+1, col+1], mat[row, col]
return
示例:
mat = np.matrix([[1,2,3], [4,5,6]])
print('Before:\n{}'.format(mat))
print('After:\n{}'.format(swap_rdi(mat, (0,1))))
输出:
Before:
[[1 2 3]
[4 5 6]]
After:
[[1 6 3]
[4 5 2]]
我有一个矩阵 (3x5),其中随机选择了一个数字。我想将所选数字与右下角的数字交换。我能够找到随机选择的数字的索引,但不确定如何将其替换为先下后右的那个。例如,给定矩阵:
[[169 107 229 317 236]
[202 124 114 280 106]
[306 135 396 218 373]]
选择的号码是280(位置[1,3]),需要和[2,4]上的373交换。我在如何移动索引方面遇到问题。我可以对其进行硬编码,但是当随机选择要交换的数字时,它会变得有点复杂。
如果所选数字在 [0,0] 上,则硬编码如下所示:
selected_task = tard_generator1[0,0]
right_swap = tard_generator1[1,1]
tard_generator1[1,1] = selected_task
tard_generator1[0,0] = right_swap
欢迎提出任何建议!
怎么样
chosen = (1, 2)
right_down = chosen[0] + 1, chosen[1] + 1
matrix[chosen], matrix[right_down] = matrix[right_down], matrix[chosen]
将输出:
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 7, 8, 9],
[10, 11, 12, 13, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
>>> index = (1, 2)
>>> right_down = index[0] + 1, index[1] + 1
>>> a[index], a[right_down] = a[right_down], a[index]
>>> a
array([[ 0, 1, 2, 3, 4],
[ 5, 6, 13, 8, 9],
[10, 11, 12, 7, 14],
[15, 16, 17, 18, 19],
[20, 21, 22, 23, 24]])
应该有边界检查但被省略了
试试这个:
import numpy as np
def swap_rdi(mat, index):
row, col = index
rows, cols = mat.shape
assert(row + 1 != rows and col + 1 != cols)
mat[row, col], mat[row+1, col+1] = mat[row+1, col+1], mat[row, col]
return
示例:
mat = np.matrix([[1,2,3], [4,5,6]])
print('Before:\n{}'.format(mat))
print('After:\n{}'.format(swap_rdi(mat, (0,1))))
输出:
Before:
[[1 2 3]
[4 5 6]]
After:
[[1 6 3]
[4 5 2]]