【问题标题】:python, matrix transpose with odd row reversedpython,矩阵转置,奇数行反转
【发布时间】:2021-04-10 08:10:31
【问题描述】:

我如何使用 numpy 使用 reshape.Treverse 等函数并纯粹通过使用 for 循环或列表理解 打印此结果?

下面是我想问的一个例子:
我该如何转换:

[[ 1.  5.  9.]
 [ 2.  6.  10.]
 [ 3.  7.  11.]
 [ 4.  8.  12.]]

到这里:

[[ 1.  8.  9.]
 [ 2.  7.  10.]
 [ 3.  6.  11.]
 [ 4.  5.  12.]]

这是我目前写的代码:

import numpy as np

arr= np.ones((4,3))
for i in range(4):
    for j in range(3):
        arr[i,j]+=i
        arr[i,j]+=j*5
print(arr)

【问题讨论】:

    标签: python arrays numpy matrix reverse


    【解决方案1】:

    不使用 numpy 函数来反转奇数列,您可以执行以下操作:

    import numpy as np
    
    # just your input data
    mat = np.arange(1.0, 13.0).reshape(3, 4).T
    
    mat_no_numpy = np.zeros_like(mat)
    rows, cols = mat.shape
    for i in range(rows):
        for j in range(cols):
            if j % 2 == 0:
                mat_no_numpy[i, j] = mat[i, j]
            else:
                # flip row-coordinate for odd columns
                mat_no_numpy[i, j] = mat[rows - i - 1, j]
    
    print(mat_no_numpy)
    # [[ 1.  8.  9.]
    #  [ 2.  7. 10.]
    #  [ 3.  6. 11.]
    #  [ 4.  5. 12.]]
    

    或者,如果允许使用numpy 函数,您可以结合使用切片和np.flip 来翻转每个奇数列:

    import numpy as np
    
    # just your input data
    mat = np.arange(1.0, 13.0).reshape(3, 4).T
    
    mat[:, 1::2] = np.flip(mat[:, 1::2])
    print(mat)
    # [[ 1.  8.  9.]
    #  [ 2.  7. 10.]
    #  [ 3.  6. 11.]
    #  [ 4.  5. 12.]]
    

    【讨论】:

    • 感谢您的回答!! ''' import numpy as np arr= np.ones((5,4)) for i in range(5): for j in range(4): arr[i,j]+=i arr[i,j] +=j*5 if j % 2 == 0: arr[i, j] else: arr[i, j] = arr[4-i, j] print(arr) ''' 我要您编写的代码并将其应用于我的代码(我到目前为止编写的代码),但这部分被卡住了,所以我无法解决它! mat[rows-i-1, j]
    • [[ 1. 1. 11. 1.] [ 2. 1. 12. 1.] [ 3. 8. 13. 18.] [ 4. 1. 14. 1.] [ 5. 1. 15. 1.]] 这是我打印出来的。好像不太明白'''[rows-i-1, j] '''
    • 我无法重现此错误。 [rows - i - 1, j] 采用j-th 列,其中不是i-th 元素,而是“相反”。给定一个包含5 行的数组,我们首先减去1,因为4 是可能的最高索引。而不是0-th 元素,然后我们采用4 - 0-th 元素,从而镜像(“翻转”)列。
    猜你喜欢
    • 2017-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    相关资源
    最近更新 更多