第四节.数组方法

一个ndarray对象有许多以某种方式在数组上操作的方法,通常返回一个数组结果。 下面简要介绍这些方法。 (每个方法的文档字符串都有更完整的描述。)

对于下面的方法,在numpy中也有对应的函数:all,argmax,argmin,argpartition,argsort,choose,clip,compress,copy,cumprod,cumsum,diagonal,imag,max,mean,min,nonzero,partition, prod,ptp,put,ravel,real,repeat,reshape,round,searchsorted,sort,squeeze,std,sum,swapaxes,take,trace,transpose,var。

1.数组转换

ndarray.item(*args) 将数组的元素复制到标准Python标量并返回
ndarray.tolist() 将数组作为(可能嵌套的)列表返回。
ndarray.itemset(*args) 将标量插入数组(如果可能的话,将标量转换为数组的dtype)
ndarray.tostring([order]) 构造包含数组中原始数据字节的Python字节。
ndarray.tobytes([order]) 构造包含数组中原始数据字节的Python字节。
ndarray.tofile(fid[, sep, format]) 以文本或二进制形式将数组写入文件(默认)。
ndarray.dump(file) 将数组的pickle转储到指定的文件。
ndarray.dumps() 以字符串形式返回数组的pickle。
ndarray.astype(dtype[, order, casting, ...]) 拷贝数组,转换为指定的类型。
ndarray.byteswap([inplace]) 交换数组元素的字节
ndarray.copy([order]) 返回数组的一个副本。
ndarray.view([dtype, type]) 具有相同数据的数组的新视图。
ndarray.getfield(dtype[, offset]) 以给定类型返回给定数组的字段。
ndarray.setflags([write, align, uic]) 设置数组标志WRITEABLE,ALIGNED,(WRITEBACKIFCOPY和UPDATEIFCOPY),分别。
ndarray.fill(value) 用标量值填充数组。

2.类型操作

为了重塑,调整大小和转置,单个元组参数可以被替换为将被解释为n元组的整数。

ndarray.reshape(shape[, order]) 返回包含具有新形状的相同数据的数组。
ndarray.resize(new_shape[, refcheck]) 改变阵列的形状和大小。
ndarray.transpose(*axes) 返回转轴的阵列视图。
ndarray.swapaxes(axis1, axis2) 返回数组with_axis1_and_axis2_interchanged的视图。
ndarray.flatten([order]) 将数组的副本返回到一个维度。
ndarray.ravel([order]) 返回一个扁平的数组。
ndarray.squeeze([axis]) 从a的形状中移除一维条目。

3.Item选择和操作

对于采用一个axis关键字的数组方法,它默认为无。 如果axis是None,则该数组被视为一维数组。 任何其他价值对于axis代表操作应该进行的维度操作。

ndarray.take(indices[, axis, out, mode]) 返回由给定索引的_a_at元素组成的数组。
ndarray.put(indices, values[, mode]) set_n.flat [n] =全部n_in索引的值[n]。
ndarray.repeat(repeats[, axis]) 数组的重复元素。
ndarray.choose(choices[, out, mode]) 使用索引数组来从一组选项构造一个新的数组。
ndarray.sort([axis, kind, order]) 本地数组排序.
ndarray.argsort([axis, kind, order]) 返回将对此数组进行排序的索引。
ndarray.partition(kth[, axis, kind, order]) 以这样的方式重新排列数组中的元素,使得第k个元素的值位于排序数组中的位置。
ndarray.argpartition(kth[, axis, kind, order]) 返回将分配此数组的索引。
ndarray.searchsorted(v[, side, sorter]) 在维护顺序中查找要插入v的元素的索引。
ndarray.nonzero() 返回非零元素的索引。
ndarray.compress(condition[, axis, out]) 沿着给定的轴返回这个数组的切片。
ndarray.diagonal([offset, axis1, axis2]) 返回指定的对角线。

4.计算

这些方法中的很多都有一个名为axis的参数。 在这种情况下,

  • 如果axis是None(缺省值),则该数组被视为一维数组,并且该操作在整个数组上执行。 如果self是0维数组或标量,此行为也是默认值。(数组标量是类型/类float32,float64等的一个实例,而0维数组是一个包含恰好一个数组标量的ndarray实例。
  • 如果axis是一个整数,那么在给定的轴上完成操作(对于可以沿给定轴创建的每个1-D子阵列)。

axis参数的例子

尺寸为3 x 3 x 3的A3维数组,在三个轴中的每一个轴上求和

>>> x
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, 25, 26]]])
>>>x.sum(axis=0)
array([[27, 30, 33],
       [36, 39, 42],
       [45, 48, 51]])
>>># for sum, axis is the first keyword, so we may omit it,
>>># specifying only its value
>>>x.sum(0),x.sum(1),x.sum(2)
(array([[27, 30, 33],
        [36, 39, 42],
        [45, 48, 51]]),
 array([[ 9, 12, 15],
        [36, 39, 42],
        [63, 66, 69]]),
 array([[ 3, 12, 21],
        [30, 39, 48],
        [57, 66, 75]]))

参数dtype指定了减少操作(如求和)应该发生的数据类型。 默认的reduce数据类型与self的数据类型相同。 为了避免溢出,使用更大的数据类型来执行减少可能是有用的。

对于几种方法,还可以提供一个可选的out参数,并将结果放入给定的输出数组中。 出来的论据必须是一个ndarray并且有相同数量的元素。 在这种情况下,可以执行不同的数据类型。

ndarray.argmax([axis, out]) 返回沿给定轴的最大值的索引。
ndarray.min([axis, out, keepdims]) 沿给定的轴返回最小值。
ndarray.argmin([axis, out]) 返回沿给定轴a的最小值的索引。
ndarray.ptp([axis, out]) 沿给定轴的峰到峰(最大值 - 最小值)值。
ndarray.clip([min, max, out]) 返回数值限制为[min,max]的数组。
ndarray.conj() 复合共轭所有元素。
ndarray.round([decimals, out]) 每个元素的Return_a_四舍五入到给定的小数位数。
ndarray.trace([offset, axis1, axis2, dtype, out]) 返回数组的对角线的和。
ndarray.sum([axis, dtype, out, keepdims]) 返回给定轴上的数组元素的总和。
ndarray.cumsum([axis, dtype, out]) 返回给定轴上元素的累积和。
ndarray.mean([axis, dtype, out, keepdims]) 返回给定轴的数组元素的平均值。
ndarray.var([axis, dtype, out, ddof, keepdims]) 沿给定轴返回数组元素的方差。
ndarray.std([axis, dtype, out, ddof, keepdims]) 返回给定轴上的数组元素的标准偏差。
ndarray.prod([axis, dtype, out, keepdims]) 返回给定轴上的数组元素的乘积
ndarray.cumprod([axis, dtype, out]) 返回给定轴上元素的累积积。
ndarray.all([axis, out, keepdims]) 如果所有元素评估为True,则返回True。
ndarray.any([axis, out, keepdims]) 如果_a_evaluate为True的任何元素,则返回True。

5.算术,矩阵乘法和比较操作

ndarrays上的算术和比较操作被定义为元素操作,并且通常将ndarray对象作为结果。

每个算术运算(+, - ,*,/,//,%,divmod(),**或pow(),<<,>>,&,^,|,〜)和比较(== ,<,>,<=,> =,!=)等同于NumPy中相应的通用函数(或简称ufunc)。 有关更多信息,请参阅通用功能部分。

比较操作符:

ndarray.__lt__ x.__lt__(y) <==> x<y
ndarray.__le__ x.__le__(y) <==> x<=y
ndarray.__gt__ x.__gt__(y) <==> x>y
ndarray.__ge__ x.__ge__(y) <==> x>=y
ndarray.__eq__ x.__eq__(y) <==> x==y
ndarray.__ne__ x.__ne__(y) <==> x!=y

数组的真值(bool ):

ndarray.__nonzero__ x.__nonzero__() <==> x != 0

注意数组的真值检验调用ndarray .__ nonzero__,如果数组中的元素个数大于1,则会引发错误,因为这样的数组的真值是不明确的。 使用.any()和.all()来清楚在这种情况下是什么意思。 (如果元素个数为0,则数组的计算结果为False。)

一元操作:

ndarray.__neg__ x.__neg__() <==> -x
ndarray.__pos__ x.__pos__() <==> +x
ndarray.__abs__() <==> abs(x)
ndarray.__invert__ x.__invert__() <==> ~x

算术方法:

ndarray.__add__ x.__add__(y) <==> x+y
ndarray.__sub__ x.__sub__(y) <==> x-y
ndarray.__mul__ x.__mul__(y) <==> x*y
ndarray.__div__ x.__div__(y) <==> x/y
ndarray.__truediv__ x.__truediv__(y) <==> x/y
ndarray.__floordiv__ x.__floordiv__(y) <==> x//y
ndarray.__mod__ x.__mod__(y) <==> x%y
ndarray.__divmod__(y) <==> divmod(x, y)
ndarray.__pow__(y[, z]) <==> pow(x, y[, z])
ndarray.__lshift__ x.__lshift__(y) <==> x<<y
ndarray.__rshift__ x.__rshift__(y) <==> x>>y
ndarray.__and__ x.__and__(y) <==> x&y
ndarray.__or__ x.__or__(y) <==> x\ y
ndarray.__xor__ x.__xor__(y) <==> x^y

注意

  • pow的任何第三个参数默默地被忽略,因为底层的ufunc只有两个参数。
  • 三个除法操作都是定义的; div在默认情况下处于激活状态当__future__除法生效时,truediv处于激活状态。
  • 由于ndarray是内置类型(用C语言编写),因此不直接定义__r {op} __特殊方法。
  • 被调用来为数组实现许多算术特殊方法的函数可以使用set_numeric_ops来修改。

算术,就地:

ndarray.__iadd__ x.__iadd__(y) <==> x+=y
ndarray.__isub__ x.__isub__(y) <==> x-=y
ndarray.__imul__ x.__imul__(y) <==> x*=y
ndarray.__idiv__ x.__idiv__(y) <==> x/=y
ndarray.__itruediv__ x.__itruediv__(y) <==> x/y
ndarray.__ifloordiv__ x.__ifloordiv__(y) <==> x//y
ndarray.__imod__ x.__imod__(y) <==> x%=y
ndarray.__ipow__ x.__ipow__(y) <==> x**=y
ndarray.__ilshift__ x.__ilshift__(y) <==> x<<=y
ndarray.__irshift__ x.__irshift__(y) <==> x>>=y
ndarray.__iand__ x.__iand__(y) <==> x&=y
ndarray.__ior__ x.__ior__(y) <==> x\ =y
ndarray.__ixor__ x.__ixor__(y) <==> x^=y

警告

就地操作将使用由两个操作数的数据类型决定的精度来执行计算,但是会默默地向下(如果需要的话)下降结果,以使其可以回到数组中。 因此,对于混合精度计算,A {op} = B可以不同于A = A {op} B.例如,假设a = ones((3,3))。 然后,a + = 3j不同于a = a + 3j:当它们都执行相同的计算时,a + = 3将结果转换回a中,而a = a + 3j将a重新绑定到 结果。

矩阵乘法:

ndarray.__matmul__

注意

矩阵运算符@和@ =是在PEP465之后的Python 3.5中引入的。 为了测试目的,NumPy 1.10.0已经初步实现了@。 进一步的文档可以在matmul文档中找到。

results matching ""

    No results matching ""