栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python Numpy 2D数组索引

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python Numpy 2D数组索引

In [1]: import numpy as npIn [2]: a = np.array([[2,0],[3,0],[3,1],[5,0],[5,1],[5,2]])In [3]: b = np.zeros((6,3), dtype='int32')In [4]: b[a[:,0], a[:,1]] = 10In [5]: bOut[5]: array([[ 0,  0,  0],       [ 0,  0,  0],       [10,  0,  0],       [10, 10,  0],       [ 0,  0,  0],       [10, 10, 10]])

工作原理:

如果您在工作分配中

b
使用 两个 numpy数组建立索引,

b[x, y] = z

然后认为NumPy的作为过的各元件同时移动

x
和中的每个元素
y
和中的每个元素
z
(我们称它们
xval
yval
zval
),并分配至b
[XVAL,利用yval]的值
zval
。当
z
为常数时,“
z
每次移动仅返回相同的值。

这就是我们想要的,与

x
作为第一列
a
y
是第二列
a
。因此,选择
x = a[:, 0]
y = a[:, 1]

b[a[:,0], a[:,1]] = 10

为什么

b[a] = 10
不起作用

当你写

b[a]
,认为NumPy的,如通过的每一个元素移动在创造一个新的数组
a
,(我们称之为每一个
idx
)和新的阵列中放置的价值
b[idx]
在的位置
idx
a

idx
是中的值
a
。所以它是一个int32。
b
形状为(6,3),
b[idx]
一行
b
形状为(3,)。例如,何时
idx

In [37]: a[1,1]Out[37]: 0

b[a[1,1]]

In [38]: b[a[1,1]]Out[38]: array([0, 0, 0])

所以

In [33]: b[a].shapeOut[33]: (6, 2, 3)

因此,让我们再次重申:NumPy的是通过创建的每个元素移动在新的阵列

a
和新阵列中放置的价值
b[idx]
在的位置
idx
a
。随着
idx
移动
a
,将创建形状为(6,2)的数组。但是由于
b[idx]
形状本身为(3,),因此在(6,2)形数组中的每个位置都放置了(3,)形值。结果是形状(6,2,3)的数组。

现在,当您进行类似

b[a] = 10

b[a]
创建具有值的形状(6,2,3)的临时数组,然后执行分配。由于10是常数,因此此赋值将值10放置在(6,2,3)形数组中的每个位置。然后,将临时数组中的值重新分配给
b
。请参阅参考文档。因此,将(6,2,3)形数组中的值复制回(6,3)形
b
数组中。值彼此覆盖。但要点是您没有获得所需的任务。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/651591.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号