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

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

如何并行寫入 numpy 數(shù)組中的同一單元格?

如何并行寫入 numpy 數(shù)組中的同一單元格?

LEATH 2023-10-11 16:23:06
背景:我在 2D 空間中有數(shù)百萬個點,(x_position, y_position, value)每個點都與之相關(guān)。我試圖通過創(chuàng)建圖像來總結(jié)這些點,其中每個像素可以包含多個點??偠灾總€像素存儲圖像中value該位置處的 s之和。(x_pixel, y_pixel)問題:我怎樣才能有效地做到這一點?目前,我的代碼做了這樣的事情:image = np.zeros((4096,4096)) for each point in data:     x_pixel, y_pixel = convertPointPos2PixelPos(point)     image[x_pixel, y_pixel] += point.getValue()但完成此代碼的預(yù)計時間為 450 小時,這是不可接受的。有沒有辦法并行化這個?image[x,y]該代碼多次寫入同一索引。我發(fā)現(xiàn) StackOverflow 帖子建議使用multiprocessing,但我認為需要lock防止競爭條件意味著這將花費與沒有并行化時一樣多的時間。
查看完整描述

1 回答

?
陪伴而非守候

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

假設(shè)您想要常規(guī)網(wǎng)格上的某些內(nèi)容,您可以使用簡單的除法來對數(shù)據(jù)進行分類。這是一個例子:


size = (4096, 4096)

data = np.random.rand(100000000, 3)

image = np.zeros(size)


coords = data[:, :2]

min = coords.min(0)

max = coords.max(0)


index = np.floor_divide(coords - min, (max - min) / np.subtract(size, 1), out=np.empty(coords.shape, dtype=int), casting='unsafe')

index現(xiàn)在是一個索引數(shù)組,image您要在其中添加相應(yīng)的值。您可以使用以下命令進行無緩沖添加np.add.at


np.add.at(image, tuple(index.T), data[:, -1])

如果您的數(shù)據(jù)范圍比僅坐標的邊界框定義得更好,則可以通過不計算coord.max()和來節(jié)省一些時間coord.min()。


結(jié)果是這樣的:

https://img1.sycdn.imooc.com/65265bb00001652104950407.jpg

在我的 10M 點的中等功率機器上,整個操作需要 6.4 秒,包括調(diào)用plt.imshowplt.colorbar運行前的垃圾收集。

使用 IPython 中的單元魔法收集時間%%timeit

不管怎樣,你的工作時間遠低于 450 小時。即使您的坐標變換不是線性分箱,我希望只要正確地對其進行矢量化,您就可以在合理的時間內(nèi)運行。此外,多重處理不太可能給您帶來巨大的提升,因為它需要復(fù)制數(shù)據(jù)。


查看完整回答
反對 回復(fù) 2023-10-11
  • 1 回答
  • 0 關(guān)注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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