gpt4 book ai didi

python - 当外部和内部循环包含计算和删除时,对其进行矢量化

转载 作者:太空宇宙 更新时间:2023-11-03 15:41:48 25 4
gpt4 key购买 nike

我一直在研究如何矢量化外部和内部 for 循环。这些有一些计算,并且内部还有一个删除 - 这似乎使它变得不那么直接。

如何最好地对其进行矢量化?

import numpy as np

flattenedArray = np.ndarray.tolist(someNumpyArray)

#flattenedArray is a python list of lists.
c = flattenedArray[:]
for a in range (len(flattenedArray)):
for b in range(a+1, len(flattenedArray)):
if a == b:
continue
i0 = flattenedArray[a][0]
j0 = flattenedArray[a][1]
z0 = flattenedArray[a][2]
i1 = flattenedArray[b][0]
i2 = flattenedArray[b][1]
z1 = flattenedArray[b][2]

if ((np.square(z0-z1)) <= (np.square(i0-i1) + (np.square(j0-j2)))):
if (np.square(i0-i1) + (np.square(j0-j1))) <= (np.square(z0+z1)):
c.remove(flattenedArray[b])

最佳答案

@MSeifert 当然,通常都是正确的。因此,以下完整矢量化只是为了展示“它是如何完成的”

import numpy as np

N = 4
data = np.random.random((N, 3))

# vectorised code
j, i = np.tril_indices(N, -1) # chose tril over triu to have contiguous columns
# useful later
sqsum = np.square(data[i,0]-data[j,0]) + np.square(data[i,1]-data[j,1])
cond = np.square(data[i, 2] + data[j, 2]) >= sqsum
cond &= np.square(data[i, 2] - data[j, 2]) <= sqsum
# because equal 'b's are grouped together we can use reduceat:
cond = np.r_[False, np.logical_or.reduceat(
cond, np.add.accumulate(np.arange(N-1)))]
left = data[~cond, :]


# original code (modified to make it run)
flattenedArray = np.ndarray.tolist(data)

#flattenedArray is a python list of lists.
c = flattenedArray[:]
for a in range (len(flattenedArray)):
for b in range(a+1, len(flattenedArray)):
if a == b:
continue
i0 = flattenedArray[a][0]
j0 = flattenedArray[a][1]
z0 = flattenedArray[a][2]
i1 = flattenedArray[b][0]
j1 = flattenedArray[b][1]
z1 = flattenedArray[b][2]

if ((np.square(z0-z1)) <= (np.square(i0-i1) + (np.square(j0-j1)))):
if (np.square(i0-i1) + (np.square(j0-j1))) <= (np.square(z0+z1)):
try:
c.remove(flattenedArray[b])
except:
pass

# check they are the same
print(np.alltrue(c == left))

关于python - 当外部和内部循环包含计算和删除时,对其进行矢量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42049156/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com