【Python】多维narray数组的子数组仍然是narray格式,赋值也无法改变这一点

问题描述:

当我运行一行代码

a = np.zeros((5,3))

a[1] = [0, 1, 0]

a[1] == [0, 1, 0]   =>true

a[2] ==[0, 0, 0]  => ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()

问题解析:

a是一个numpy数组,其子数组也是一个numpy数组

>>> a=np.zeros((5,3))
>>> a
array([[ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.],
       [ 0.,  0.,  0.]])
>>> a[2] == [0,0,1]
array([ True,  True, False], dtype=bool)

可以看出,numpy数组和普通数组、numpy数组做逻辑比较,实际上是挨个比较,比较结果仍然是一个numpy数组。

>>> type(a[2])
<class 'numpy.ndarray'>

问题解决:

方法一:把a定义为普通二维数组。

方法二:用.all()与.any()

>>> a[2]
array([ 0.,  0.,  0.])
>>> (a[2]==[0,1,0]).any()
True
>>> (a[2]==[0,1,0]).all()
False

注意:即便是通过如下方式定义的数组,其元素仍然是narray格式。

>>>sss = np.array([[0 for i in range(3)] for j in range(self.N)]
>>>sss[0] 
array([0, 0, 0])

通过赋值方式改变narray元素:

>>> sss[0] = [0,0,0]
>>> print(sss)
array([[ 0.,  0.,  0.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.],
       [ 1.,  1.,  1.]])
>>> type(sss[0])
<class 'numpy.ndarray'>


©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值