numpy 创建ndarray(from existing data)

1 numpy.array

array(object[, dtype=None, copy=True, order='K', subok=False, ndmin=0])

2 numpy.asarray

asarray(a[, dtype=None, order=None])

将(列表、元组及其嵌套结构)数据a转换成ndarray

返回ndarray数据

1 当a为元组、列表array时

返回值值与输入值不相同

import numpy as np
a = [1,2]
b = np.asarray(a)
print(a) #[1, 2]
print(b) #[1 2]

2 当a为ndarray且不做任何改变时

原数据a与返回值为同一个地址

import numpy as np
a = np.array([1,2])
b = np.asarray(a)
a += 2
print(a) #[3 4]
print(b) #[3 4]
print(a is b)  #True

3 当a为ndarray且改变数据结构时

复制一份数据

import numpy as np
a = np.array([1,2],dtype=np.float32)
b = np.asarray(a,dtype='i4')
a += 2
print(a) #[3. 4.]
print(b) #[1 2]
print(a is b)  #False

总之,可理解为不改变元数据时,为同一个数据地址,当改变元数据时,返回值会复制元数据并进行asarray格式化。

3 numpy.frombuffer

frombuffer(buffer[, dtype=float, count=-1, offset=0])

将缓冲区解释为一维数组。

暴露缓冲区接口的任何对象都用作参数来返回ndarray

buffer - 一个暴露在缓冲取接口的对象

dtype - 返回ndarray的数据类型,默认float

count - 读取数据数量,默认-1,也即读取所有数据 int数据类型

offset - 读取数据的起始位置(偏移量)

返回值ndarray

import numpy as np
s = 'hello world'
a = np.frombuffer(s,dtype='S1',count=5,offset=6)
print(a)
# 报错:AttributeError: 'str' object has no attribute '__buffer__'

一直没有弄明白,一直报错,要不就是 itemsize cannot be zero in type 

猜你喜欢

转载自www.cnblogs.com/gengyi/p/9195512.html
今日推荐