In [1]:
import numpy as np

创建ndarray

1.用 empty(), zeros(), ones() 创建

np.empty()

numpy.empty(shape, dtype = float, order = 'C')
使用empty() 创建时, 数组元素将是随机值

In [3]:
print( np.empty( [3,3], dtype=int) ) # shape 参数可以是list
[[  43057181          0 1675088208]
 [         0          2          0]
 [        -1         -1          0]]
In [6]:
print( np.empty( (2,3), dtype=np.float) ) # 也可以是tuple
[[6.6e-322 0.0e+000 0.0e+000]
 [0.0e+000 0.0e+000 0.0e+000]]

np.zeros()

np.zeros()创建全0数组

In [7]:
print( np.zeros((2,2,3), dtype='i2') ) # 创建了一个三维矩阵
[[[0 0 0]
  [0 0 0]]

 [[0 0 0]
  [0 0 0]]]
In [9]:
print( np.zeros((2,5), dtype=np.float) )
[[0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0.]]

np.ones()

np.ones() 创建全1数组

In [11]:
print(np.ones(1)) # 可以看到, 默认数据类型为float
[1.]
In [13]:
print(np.ones((1,)))
[1.]
In [19]:
print(np.ones((1,1))) # 创建了一个1行1列的二维数组
[[1.]]
In [21]:
print(np.ones((2,3), dtype='i1'))
[[1 1 1]
 [1 1 1]]

2.从已有数据创建ndarray

np.asarray()

numpy.asarray(a, dtype = None, order = None)
a可以是任意形式的输入参数,可以是,列表, 列表的元组, 元组, 元组的元组, 元组的列表,多维数组

In [27]:
print(np.asarray((1,2,3,4)))
print(np.asarray([1,2,3,4]))
[1 2 3 4]
[1 2 3 4]
In [39]:
print(np.asarray( [(1,1,1), (2,2,2)] ))     # list of tuple
print() 
print(np.asarray( ([1,1,1], [2,2,2]) ))     # tuple of list
[[1 1 1]
 [2 2 2]]

[[1 1 1]
 [2 2 2]]
In [48]:
print(np.asarray( ([1,1,1], [2,2]) ))  # 当 tuple 中是list时, list长度要相等
print(np.asarray( [(1,1,1), (1,1)] ))  # 当 list 中是tuple时, tuple的长度可以不等
[list([1, 1, 1]) list([2, 2])]
[(1, 1, 1) (1, 1)]

np.fromiter()

numpy.fromiter(iterable, dtype, count=-1)
numpy.fromiter 方法从可迭代对象中建立 ndarray 对象,返回一维数组。
count表示要读取的数据量, -1表示全部读取

In [52]:
a = np.fromiter( range(10), dtype=int)
print(a)
[0 1 2 3 4 5 6 7 8 9]

numpy.frombuffer()

numpy.frombuffer(buffer, dtype = float, count = -1, offset = 0)
从缓冲区读取数据, offset表示读取的起始位置

In [55]:
s = b'hello world' # 前面加b , 把str对象转换为字符串数组
a = np.frombuffer(s, dtype='S1' )
print(a)
[b'h' b'e' b'l' b'l' b'o' b' ' b'w' b'o' b'r' b'l' b'd']

3.从数值范围创建

numpy.arange()

numpy.arange(start, stop, step, dtype)
生成从[start,stop), 步长为step的数组, 注意是前开后闭区间
dtype 默认为参数的数据类型

In [57]:
print(np.arange(5, step=1.3) ) # stop = 5,  省略了start
[0.  1.3 2.6 3.9]
In [59]:
print(np.arange(0.1, 0.9, 0.2))  
[0.1 0.3 0.5 0.7]
In [64]:
print(np.arange(0.1, 3.9) )  # step 默认为1
[0.1 1.1 2.1 3.1]

numpy.linspace()

np.linspace(start, stop, num=50, endpoint=True, retstep=False, dtype=None)

  • 该函数把区间[start, stop] 分成num段, 返回的数组表示区间的端点
  • 当endpoint表示要不要包含stop到最后的数组中
In [70]:
print(np.linspace(1, 10, 1, dtype=int))
print(np.linspace(1, 10, 2, dtype=int))
[1]
[ 1 10]
In [71]:
print(np.linspace(1, 10, 5))
[ 1.    3.25  5.5   7.75 10.  ]
In [75]:
t = np.linspace(1, 10, 5, retstep=True)  # 返回的是一个tuple
print(t)  
print(t[0])    # 第一个就是生成的数组
print(t[1])    # 第二个是步长 step 
(array([ 1.  ,  3.25,  5.5 ,  7.75, 10.  ]), 2.25)
[ 1.    3.25  5.5   7.75 10.  ]
2.25

numpy.logspace()

np.logspace(start, stop, num=50, endpoint=True, base=10.0, dtype=None)
该函数用于创建一个等比数列
base : 对数log的底数

In [84]:
print(np.logspace(0, 10, 6, base=2) )
print(np.logspace(0, 10, 6, base=2, dtype=int) )
[1.000e+00 4.000e+00 1.600e+01 6.400e+01 2.560e+02 1.024e+03]
[   1    4   16   64  256 1024]