我有2个包含一些数据的数组a
和b
。我还有一个数组select
,我想使用它从a或b中选择。我只是想知道是否有Python方式来做到这一点。这是我当前的实现,将a和b的每一行放入列表中,然后从中选择。
a = np.zeros(shape=(10,2,1,3,4))
b = np.ones(shape=(10,2,1,3,4))
select = [1,1,1,0,1,0,1,0,1,0]
c = []
for a1,b1,select1 in zip(a,b,select):
a1b1 = [a1,b1]
c.append(a1b1[select])
答案 0 :(得分:0)
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2>Routines</h2>
<table border="2">
<tr bgcolor="#7f7f7f">
<td style="text-align:left">Title</td>
<td style="text-align:left">Symbol</td>
<td style="text-align:left">Operation</td>
<td style="text-align:left">Input Layer 1</td>
</tr>
<xsl:for-each select="family/Image1in">
<xsl:sort select="routine"/>
<tr>
<td><xsl:value-of select="normalize-space(routine)"/></td>
<td><xsl:value-of select="normalize-space(symbolic)"/></td>
<td><xsl:value-of select="normalize-space(operation)"/></td>
<td><xsl:value-of select="normalize-space(inputLayer1)"/></td>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
是一种非常有效的解决方案,但最多只能用于两个数组。
我会这样:
np.where
这应该可以扩展到任意数量的数组,例如:
np.stack((a, b))[select, np.arange(len(a))]
答案 1 :(得分:0)
如果仅从两个数组中选择,则可以使用select
作为权重:
w = np.array(select)
c = (a.T * w + b.T * (1 - w)).T
如果您要组合两个以上的数组,则无法使用此技巧。
答案 2 :(得分:0)
In [512]: a = np.zeros(shape=(10,2,1,3,4))
...: b = np.ones(shape=(10,2,1,3,4))
...:
...: select = [1,1,1,0,1,0,1,0,1,0]
使用转置的方式与@DYZ相同:
In [513]: res = np.where(select, a.T, b.T).T
In [514]: res.shape
Out[514]: (10, 2, 1, 3, 4)
如果不想转置,可以向select
添加尺寸,以便其广播为与a
和b
相同的形状:
In [516]: res1 = np.where(np.array(select)[:,None,None,None,None],a,b)
In [517]: res1.shape
Out[517]: (10, 2, 1, 3, 4)
In [518]: np.allclose(res,res1)
Out[518]: True