【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'>


发布了392 篇原创文章 · 获赞 487 · 访问量 240万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览