第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

合并兩個 numpy 數(shù)組,一個作為鍵,另一個作為值

合并兩個 numpy 數(shù)組,一個作為鍵,另一個作為值

千萬里不及你 2023-07-18 15:37:46
有沒有函數(shù)可以對 numpy 數(shù)組進行 groupby sum ?可能與此重復(fù)x?=?np.array([[1.2,?10], ??????????????[2.3,?20], ??????????????[1.2,?30], ??????????????[2.3,?7] ????????????])想要的輸出:x?=?np.array([[1.2,?40], ??????????????[2.3,?27]???????????? ????????????])更新:實際上,我的數(shù)據(jù)的第一列總是四舍五入到小數(shù)點后兩位。所以x可以寫成:x?=?np.array([[120,?10], ??????????????[230,?20], ??????????????[120,?30], ??????????????[230,?7] ????????????])
查看完整描述

4 回答

?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

我不會說這是重復(fù)的,但您提到的相關(guān)問題是一個很好的起點。您鏈接的大多數(shù)答案都需要對數(shù)組進行排序,提取組開始的索引,然后調(diào)用np.split它。這里不是這種情況,因為它會返回一個大小不平衡的組列表。


相反,您可以使用np.bincount方法。它計算每個加權(quán)值出現(xiàn)的次數(shù),這實際上與 groupby sum 相同,只是輸出中缺少組鍵。


def group_by_sum(x):

    u, idx = np.unique(x[:,0], return_inverse=True)

    s = np.bincount(idx, weights = x[:,1])

    return np.c_[u, s]

獎金。它實際上是numpy_indexed包裝中的一個單行:


np.transpose(npi.group_by(x[:, 0]).sum(x[:, 1]))

標(biāo)桿管理

import numpy as np

import perfplot

import matplotlib.pyplot as plt


def bincount(x):

    u, idx = np.unique(x[:,0], return_inverse=True)

    s = np.bincount(idx, weights = x[:,1])

    return np.c_[u, s]


def reduceat(x):

    x = x[np.argsort(x[:, 0])]

    i = np.flatnonzero(np.diff(x[:, 0]))

    i = np.r_[0, i + 1]

    s = np.add.reduceat(x[:, 1], i)

    return np.stack((x[i, 0], s), axis=-1)


def setup(N, s):

    x = np.linspace(0,1,N+1)[np.random.randint(N, size = s)]

    return np.c_[x, (x**2)%1]


def build_args(k):

    return {'setup': lambda x: setup(k, x),

            'kernels': [bincount, reduceat],

            'n_range': [2**k for k in range(1, 20)],

            'title': f'Testing for x samples in [0, 1] with no more than {k} groups',

            'show_progress': True,

            'equality_check': False}


outs = [perfplot.bench(**build_args(n)) for n in (10, 100, 1000, 10000)]

fig = plt.figure(figsize=(20, 20))

for i in range(len(outs)):

    ax = fig.add_subplot(2, 2, i + 1)

    ax.grid(True, which="both")

    outs[i].plot()

plt.show()

http://img1.sycdn.imooc.com//64b6417d00014c8e12790674.jpg

查看完整回答
反對 回復(fù) 2023-07-18
?
不負(fù)相思意

TA貢獻1777條經(jīng)驗 獲得超10個贊

Numpy 提供了無需顯式循環(huán)即可完成此操作的工具。

首先對行進行排序:

a = a[np.argsort(a[:, 0])]

然后找到值發(fā)生變化的索引:

i = np.flatnonzero(np.diff(a[:, 0]))
i = np.r_[0, i + 1]

然后將元素相加:

s = np.add.reduceat(a[:, 1], i)

索引只是a每次運行中的第一個元素,因此結(jié)果是

result = np.stack((a[i, 0], s), axis=-1)


查看完整回答
反對 回復(fù) 2023-07-18
?
慕碼人2483693

TA貢獻1860條經(jīng)驗 獲得超9個贊

這是一個使用唯一值來計算每個元素的重復(fù)次數(shù)并將其乘以其值來計算 groupby 總和的解決方案(您可以通過實現(xiàn)僅計算重復(fù)和唯一值的哈希圖來更快地實現(xiàn)它)O(n):


編輯原始問題已編輯:


keys2, idx, count = np.unique(x[:,0], return_counts=True, return_index=True)

values2 = x[:,1][idx]*count

另一種方法是使用 pandas groupby:


df = pd.DataFrame({'keys':x[:,0], 'values':x[:,1]})

df2 = df.groupby(keys)['values'].agg('sum')

keys2, values2 = df2.index.to_numpy(), df2.values

輸出:


[1.2 2.3] 

[20 30]


查看完整回答
反對 回復(fù) 2023-07-18
?
ABOUTYOU

TA貢獻1812條經(jīng)驗 獲得超5個贊

這是一個方法


d = {}

for k,v in x:

    d[k] = d.get(k,0) + v


x = np.array(list(d.items()))

請記住,這是測試浮動相等性......您可能不應(yīng)該這樣做


查看完整回答
反對 回復(fù) 2023-07-18
  • 4 回答
  • 0 關(guān)注
  • 186 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號