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时,您会发现它仅采用参数m
和k
:
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)]