1、numpy的ndarray用于变量声明,参数如下:
(self, shape, dtype=None, buffer=None, offset=0, strides=None, order=None)
也就是申请一个什么形状的array
a = np.ndarray([2,2])
print(a.shape) # 输出:(2,2)
print(a) # 输出:
[[0. 0.]
[0. 0.]]
2、使用array来创建array变量,参数:
p_object, dtype=None, copy=True, order='K', subok=False, ndmin=0
最普通的用法:
b = np.array([[1,2],[3,4]],dtype=np.float32)
print(b.shape) # 输出:(2,2)
print(a) # 输出:
[[1. 2.]
[3. 4.]]
3、使用asarray创建array变量,参数:
a, dtype=None, order=None
作用是将array_like的输入转化为array
c = np.asarray([[5,6],[7,8]])
这样的作用是和array一样。
不同的是:
c = np.asarray(b)
那么此时c指向的数组与b是相同的
使用id(obj)来查看两者的地址:
print(id(b))
print(id(c))#输出:
2149581573136
2149581573136
可以看到是一致的。而且将b的第一行数据改变:
b[0] = 11
print(b)
print(c) #输出:
[[11. 11.]
[ 3. 4.]]
[[11. 11.]
[ 3. 4.]]
这时相当于是,b和c都是指向这片变量地址的指针。
4、 is和==的区别
a = np.ndarray([2,2]) b = np.array(a) c = np.asarray(b)
b[0] = 11
print(a is b) print(a is c) print(b is c) print(a == b) print(a == c) print(b == c) #输出:
False
False
True
[[False False]
[ True True]]
[[False False]
[ True True]]
[[ True True]
[ True True]]
可以看出,is是判断两个对象是否是同一个对象的,使用asarray是将b的地址赋给了c,所以二者的判断是True,使用array是新建一个同型同值的变量,因此不是同一个对象,所以判断都是False。
而==是元素级别的相等与否的判断,对于同型tensor,返回的也是布尔类型的同型tensor。