numpy常用接口

numpy.ndarray

numpy.ndarray(shape, dtype=None, buffer=None, offset=0, strides=None, order=None)

This is an array object represents a multidimensional array of fixed-size items(Fixed-size 意味着数组一旦创建就没法修改了)。

  1. shape: tuple of ints(除了该参数必须之外,其余为可选);
  2. dtype: data-type
  3. buffer: object exposing buffer interface, used to fill the array with data.
  4. offset: int, offset of array data in buffer.
  5. strides: tuple of ints, strides of data in memory.
  6. order: {‘C’, ‘F’}, row-major (C-style) or column-major (Fortran-style).

注:

  1. 如果 buffer 是 None,则只有 Shape、dtype、 order 是需要的。
  2. 如果 buffer 不是 None,则所有参数都会用到。
  3. buffer 的 dtype 和 ndarray 的 dtype 要保持一致。
1
2
3
4
>>> m = np.ndarray(shape=(2, 3), dtype=np.int32, buffer=np.array([1,2,3,4,5,6], dtype=np.int32))
>>> m
[[1 2 3]
[4 5 6]]

numpy.array

numpy.array(object, dtype=None, copy=True, order=‘K’, subok=False, ndmin=0)

这是 numpy 创建数组最常用的方式了,object 通常传入一个 list 数组,可以是一维或者多维。

e.g.

1
2
3
4
5
6
7
>>> np.array([1, 2, 3.0])
array([ 1., 2., 3.])
>>> np.array([[1, 2], [3, 4]])
array([[1, 2],
[3, 4]])
>>> np.array([1, 2, 3], dtype=complex)
array([ 1.+0.j, 2.+0.j, 3.+0.j])

numpy.allclose()

numpy.allclose(a, b, rtol=1e-05, atol=1e-08, equal_nan=False)

Returns True if two arrays are element-wise equal within a tolerance.

numpy.arange()

numpy.arange([start,] stop, [step, ] dtype=None)

Returns an ndarray in range [start, stop)

e.g.

1
2
3
4
5
6
7
8
>>> np.arange(3)
array([0, 1, 2])
>>> np.arange(3.0)
array([ 0., 1., 2.])
>>> np.arange(3,7)
array([3, 4, 5, 6])
>>> np.arange(3,7,2)
array([3, 5])

与python内置的range和xrange的比较:

range()多用于循环,会返回一个list。xrange()也多用于循环,但不返回list,而是类似generator,每次返回一个元素,因此内存开销更小。另外,python3 已经将range()的实现改成xrange()的方式,而xrange()这个接口则已经被取消了。

numpy.asmatrix()

numpy.asmatrix(data, dtype=None)

Interprete the input as a matrix, does not make a copy if the input is already a matrix or an ndarray.

Returns numpy matrix.

1
2
3
4
5
6
>>> x = np.array([[1, 2], [3, 4]])
>>> m = np.asmatrix(x)
>>> x[0,0] = 5
>>> m
matrix([[5, 2],
[3, 4]])

numpy.random.permutation

numpy.random.permutation(x)

Randomly permute a sequence, or return a permuted range.

  1. Parameters

    x: int or array_like. If x is an integer, randomly permute np.arange(x). If x is an array, make a copy and shuffle the elements randomly.

  2. Returns

    out: ndarray. Permuted sequence or array range.

1
2
3
>>> permutation = np.random.permutation(np.array((1,2,3,4,5)))
>>> permutation
array([2, 4, 3, 5, 1])

numpy 生成序列中的随机子序列

可以借助 numpy.random.choice 接口。

例如,要从 0 ~ 5 的数字中随机挑出 3 个数字,可以这样写:

1
2
>>> np.random.choice(5, 3)  # 等概率随机挑选
array([0, 3, 4])

还可以根据不同的概率挑选:

1
2
>>> np.random.choice(5, 3, p=[0.1, 0, 0.3, 0.6, 0])  # 3 的概率最大,为0.6
array([3, 3, 0])

可以设置不放回地挑选:

1
2
>>> np.random.choice(5, 3, replace=False, p=[0.1, 0, 0.3, 0.6, 0])
array([2, 3, 0]) # 数字不会重复

当然,除了数字外,我们可以对其他类型的列表进行随机挑选:

1
2
3
4
>>> aa_milne_arr = ['pooh', 'rabbit', 'piglet', 'Christopher']
>>> np.random.choice(aa_milne_arr, 5, p=[0.5, 0.1, 0.1, 0.3])
array(['pooh', 'pooh', 'pooh', 'Christopher', 'piglet'],
dtype='|S11')

numpy.argmax

numpy.argmax(a, axis=None, out=None)

返回数组中最大值的下标

  1. 参数

    a:数组

    axis:比较的坐标系或者维度,如果没有提供,则对数组中的所有元素进行比较。

  2. 返回一个下标数组

e.g.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
>>> a = np.arange(6).reshape(2,3)
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> np.argmax(a) # 比较所有元素
5

>>> np.argmax(a, axis=0) # 比较列
array([1, 1, 1])
>>> np.argmax(a, axis=1) # 比较行
array([2, 2])

>>> b = np.arange(6)
>>> b[1] = 5
>>> b
array([0, 5, 2, 3, 4, 5])
>>> np.argmax(b) # Only the first occurrence is returned.
1

numpy.where

numpy .where(condition, x, y)

这个函数会根据 condition,返回合适的下标。

e.g.

1
2
3
4
>>> a = np.array([1,2,3,4])
>>> b = np.array([2,1,4,5])
>>> np.where(a > b)
(array([1]),) # 只有a[1]>b[1]