Python 2.7.10;脾气暴躁的1.8.1

浏览有关矩阵旋转here的示例时,我一直遇到错误。

代码:

m = np.arange(8).reshape((2,2,2))
np.rot90(m, 1, (1,2))


错误:


  TypeError:rot90()最多接受2个参数(给定3个)


我尝试复制和粘贴,然后键入代码,但没有任何乐趣。

我了解错误的内容,但不了解原因,尤其是因为它是直接从SciPy网站获取的代码。

有什么问题

最佳答案

不幸的是,我认为New in version 1.12.0.放在错误的位置。实际上,当您查看1.8.1 documentation时,您会发现它仅采用参数mk


  numpy.rot90(m,k = 1)


它是在版本1.12.0中添加的,现在rot90接受axis参数:


  numpy.rot90(m,k = 1,轴=(0,1)


相应的更改日志为here


  rot90的axes关键字参数
  
  rot90中的axes关键字参数确定数组在其中旋转的平面。与原始功能一样,它默认为axis =(0,1)。


但是函数本身不是很长,您可以将其复制过来:

def rot90(m, k=1, axes=(0,1)):
    axes = tuple(axes)
    if len(axes) != 2:
        raise ValueError("len(axes) must be 2.")

    m = asanyarray(m)

    if axes[0] == axes[1] or absolute(axes[0] - axes[1]) == m.ndim:
        raise ValueError("Axes must be different.")

    if (axes[0] >= m.ndim or axes[0] < -m.ndim
        or axes[1] >= m.ndim or axes[1] < -m.ndim):
        raise ValueError("Axes={} out of range for array of ndim={}."
            .format(axes, m.ndim))

    k %= 4

    if k == 0:
        return m[:]
    if k == 2:
        return flip(flip(m, axes[0]), axes[1])

    axes_list = arange(0, m.ndim)
    (axes_list[axes[0]], axes_list[axes[1]]) = (axes_list[axes[1]],
                                                axes_list[axes[0]])

    if k == 1:
        return transpose(flip(m,axes[1]), axes_list)
    else:
        # k == 3
        return flip(transpose(m, axes_list), axes[1])

def flip(m, axis):
    if not hasattr(m, 'ndim'):
        m = asarray(m)
    indexer = [slice(None)] * m.ndim
    try:
        indexer[axis] = slice(None, None, -1)
    except IndexError:
        raise ValueError("axis=%i is invalid for the %i-dimensional input array"
                         % (axis, m.ndim))
    return m[tuple(indexer)]

10-07 15:14