我有一个复杂的函数,该函数接受两个参数x和y并返回整数值i。信息i保存在形状为(200,200)的numpy数组FF中。 FF中的元素值i在0到39999之间,并且在整个数组中未分配两次。 数组FF是预先计算的,在创建数组SF时存在。 (请参见下文)其他信息:复杂函数计算qrcode的NxN矩阵中位的位置,可以针对每个qrcode版本和ecc预先计算该位
第二个函数,它使用函数SF [i]创建布尔值的一维数组SF,因此其形状为(40000,)。 数组是用
创建的SF = numpy.fromfunction((lambda i: ((data[i >> 3] >> 7 - (i & 7)) & 1 != 0)), (40000,))
,其中data []是具有字节的数组。 (其他信息:该函数将每个字节的每一位评估为true或false。)
重要的是: FF [x] [y] = i 描述了所需信息在SF阵列中的位置。
我的问题
是否有集成的FAST numpy函数(或NUMPY函数的连续应用程序),该函数可以(不使用慢速的python迭代,枚举或for循环)组合两个数组FF和SF,从而创建目标数组TARGET(像SF [(FF [x] [y])])一样?
import numpy as np
FF = np.arange(40000)
np.random.shuffle(FF)
# FF = FF.reshape((200, 200)) # Only to understand 200x200 = 40000
FF = FF.reshape((40000,))
SF = np.random.choice(2, size=40000).astype(bool) # Create Array with random boolean
TARGET = np.zeros((40000,), dtype=bool) # Create Target array
for index in range(40000): # This for should be replaced with numpy to create TARGET
pos_in_SF_array = FF[index] # get position in Second array out of First array at position 0..39999
value_true_false_at_pos = SF[pos_in_SF_array] # get True or False at the desired position
TARGET[index] = value_true_false_at_pos # Write it at the position index from TARGET
print("Example for take pos in first array and address the value of second array:")
print("Then write the True false in the Target array")
print(FF[12345])
print(SF[FF[12345]])
TARGET[12345] = SF[FF[12345]] # Assign the Value
TARGET = TARGET.reshape(200, 200) # Reshape it in the same manner as FF
print(TARGET)
答案 0 :(得分:0)
好吧,我找到了关于此主题How to get the values from a NumPy array using multiple indices
的最简单解决方案TARGET2 = (np.take(SF, FF)).reshape(200,200)
print(np.array_equal(TARGET, TARGET2)) # True