如果我们有一个像numpy数组:
$constraint = new Jasny\PHPUnit\Constraint\XSDValidation("myschema.xsd");
$xml = $this->object->doSomething();
$this->assertThat($xml, $constraint);
我们想设置一个元素,由另一个
给出Array = np.zeros((2, 10, 10))
我们怎么能这样做?
indexes = np.array([0,0,0])
将Array的FIRST维度的每个元素设置为5
答案 0 :(得分:8)
使用a
作为数据数组,idx
作为索引数组,使每行对应于要在数据数组中设置的一个元素,您可以这样做 -
a[tuple(idx.T)] = 5
示例运行 -
In [94]: a = np.zeros((2,2,3),dtype=int)
In [95]: idx = np.array([[0,0,0],[1,1,0],[0,1,2]])
In [96]: a[tuple(idx.T)] = 5
In [97]: a
Out[97]:
array([[[5, 0, 0],
[0, 0, 5]],
[[0, 0, 0],
[5, 0, 0]]])
In [98]: a[tuple(idx.T)] = [5,10,15] # or set different values
In [99]: a
Out[99]:
array([[[ 5, 0, 0],
[ 0, 0, 15]],
[[ 0, 0, 0],
[10, 0, 0]]])
或者,我们可以使用np.ravel_multi_index
计算线性索引,然后使用np.put
执行分配,就像这样 -
np.put(a,np.ravel_multi_index(idx.T,a.shape),5)
如果您正在处理三维数组,我们可以对三维索引进行切片并指定另一种方法,如下所示 -
a[idx[:,0],idx[:,1],idx[:,2]] = 5
如果只需要设置一个元素,只需执行 -
a[tuple(idx)] = 5
示例运行 -
In [118]: a = np.zeros((2,2,3),dtype=int)
In [119]: idx = np.array([0,0,0])
In [120]: a[tuple(idx)] = 5
In [121]: a
Out[121]:
array([[[5, 0, 0],
[0, 0, 0]],
[[0, 0, 0],
[0, 0, 0]]])