conversations.replies
是一个形状为a
的数组。
(N, M, D) == (20, 4096, 6)
是一个形状为b
的数组。
我想将(N,) == (20,)
的值插入b
,以便a
中的每个值都按元素添加到b
dim D
中}(a
中的第7个元素)。
因此a
将是一个形状为c
的数组,其中(20, 4096, 7)
适用于所有c[i,:,-1] == b[i]
和i
。
我知道您可以创建一个新数组并相应地添加值,例如:
c[...,:-1] == a
但是想知道这里的一个numpy向导是否有一个更灵巧的方式来做这个与numpy操作和没有中间数组。
答案 0 :(得分:1)
在将b
扩展到3D
之后沿第二个轴复制a
,然后沿最后一个轴与b_rep = np.repeat(b[:,None,None],a.shape[1],axis=1)
out = np.concatenate((a, b_rep,axis=-1)
连接 -
np.broadcast_to
或者,我们可以使用b_rep = np.broadcast_to(b[:,None,None], (len(b), a.shape[1],1)
创建复制版本:
browser = webdriver.Chrome('C:\chromedriver.exe')
browser.get('https://www.premierleague.com/players/4330/player/stats?co=1&se=79')
wait = WebDriverWait(browser, 10)
wait.until(
EC.element_to_be_clickable(
(By.XPATH, "//*[@role='button'][text()='2017/18']")))
html = browser.page_source
soup = bs(html, 'lxml')
答案 1 :(得分:1)
这是另一个单行
np.r_['2,3,0', a, np.broadcast_to(b, (a.T.shape[1:])).T]
另外,我想提一下,您的原始方法实际上接近(或至少是)推荐的方式。只需使用empty
代替zeros
并广播而不是循环:
res = np.empty((N,M,D+1), np.promote_types(a.dtype, b.dtype))
res[..., :-1], res[..., -1] = a, b[:, None]
...
而且 - 只是为了好玩 - 还有一个,我明确不建议。 不要使用它!
np.where(np.arange(D+1)<D, np.lib.stride_tricks.as_strided(a, (N,M,D+1), a.strides), b[:, None, None])