1.ndarray数组维度-横向量和列向量
a = array([1,2,3]) #一维列向量
print(a.shape, a)
b = array([[1,2,3]]) #二维横向量
print(b.shape, b)
(3,) [1 2 3]
(1, 3) [[1 2 3]]
{关于numpy数组维度表示上的区别,numpy多维数组横向量和列向量的区别}
zeros([5,]) #返回的是一维列向量
[ 0. 0. 0. 0. 0.]
#等价于这样的矩阵(一维数组),zeros([5])、zeros(5)以及zeros(5,)
zeros([5, 1]) #返回的是二维列向量
[[ 0.]
[ 0.]
[ 0.]
[ 0.]
[ 0.]]
zeros([1, 5]) #二维横向量
[[ 0. 0. 0. 0. 0.]]
a = array([1,2,3]) #一维列向量
print(a.shape, a)
b = array([[1,2,3]]) #二维横向量
print(b.shape, b)
(3,) [1 2 3]
(1, 3) [[1 2 3]]
Note:a=np.array([1,2,3]) 由 a.shape知道a是一个列向量,而b=np.array([[1,2,3]])是一个横向量。
b=arange(1,5) #列向量
print(b.shape, b)
a=array([[1,2,3,4]])#横向量
print(a.shape, a)
print(a+b)
(4,) [1 2 3 4]
(1, 4) [[1 2 3 4]]
[[2 4 6 8]]
Note:
- 上面的例子没有说明的,数值就是原来的,没有变。比较上面知道,基本上横向量和列向量是可以任意加减的。但是其他的要有一样的shape才可以。
2.一维列向量的转置还是本身。 - 一维列向量(如(3,))在广播运算中是当做二维行向量(如(1,3))计算的。也就是说(3,)相当于(1,3)。
2.array元素存取
元素存取的不同方式
下标范围存取元素
结束索引在这儿是不被包含的!和python中的list的索引相同!但是不同于pandas中的索引是被包含的!!!
数组元素的存取方法和Python的标准方法相同:
>>> a = np.arange(10)
>>> a[5] # 用整数作为下标可以获取数组中的某个元素
5
>>> a[3:5] # 用范围作为下标获取数组的一个切片,包括a[3]不包括a[5]
array([3, 4])
>>> a[:5] # 省略开始下标,表示从a[0]开始
array([0, 1, 2, 3, 4])
>>> a[:-1] # 下标可以使用负数,表示从数组后往前数
array([0, 1, 2, 3, 4, 5, 6, 7, 8])
>>> a[2:4] = 100,101 # 下标还可以用来修改元素的值
>>> a
array([ 0, 1, 100, 101, 4, 5, 6, 7, 8, 9])
>>> a[1:-1:2] # 范围中的第三个参数表示步长,2表示隔一个元素取一个元素
array([ 1, 101, 5, 7])
>>> a[::-1] # 省略范围的开始下标和结束下标,步长为-1,整个数组头尾颠倒
array([ 9, 8, 7, 6, 5, 4, 101, 100, 1, 0])
>>> a[5:1:-2] # 步长为负数时,开始下标必须大于结束下标
array([ 5, 101])
numpy数组下标是可以越界的!
b
array([1, 2, 3, 4, 5, 6])b[1:30309]
array([2, 3, 4, 5, 6])
如果越界了,会自动检测,只返回到结尾的数据。
和Python的列表序列不同,通过下标范围获取的新的数组是原始数组的一个视图,它与原始数组共享同一块数据空间。
>>> b = a[3:7] # 通过下标范围产生一个新的数组b,b和a共享同一块数据空间
>>> b
array([101, 4, 5, 6])
>>> b[2] = -10 # 将b的第2个元素修改为-10
>>> b
array([101, 4, -10, 6])
>>> a # a的第5个元素也被修改为10
array([ 0, 1, 100, 101, 4, -10, 6, 7, 8, 9])
除了使用下标范围存取元素之外,NumPy还提供了两种存取元素的高级方法。
3.使用整数序列
当使用整数序列对数组元素进行存取时,将使用整数序列中的每个元素作为下标,整数序列可以是列表或者数组。使用整数序列作为下标获得的数组不和原始数组共享数据空间。
>>> x = np.arange(10,1,-1)
>>> x
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3, 3, 1, 8]] # 获取x中的下标为3, 3, 1, 8的4个元素,组成一个新的数组;python自带的list不能这么做
array([7, 7, 9, 2])
>>> b = x[np.array([3,3,-3,8])] #下标可以是负数
>>> b[2] = 100
>>> b
array([7, 7, 100, 2])
>>> x # 由于b和x不共享数据空间,因此x中的值并没有改变
array([10, 9, 8, 7, 6, 5, 4, 3, 2])
>>> x[[3,5,1]] = -1, -2, -3 # 整数序列下标也可以用来修改元素的值
>>> x
array([10, -3, 8, -1, 6, -2, 4, 3, 2])