【发布时间】:2017-12-08 14:39:25
【问题描述】:
以下问题背后的一般数学原理是什么?
取一个包含整数的向量,例如[3, 3, 3, 3, 4, 6, 3, 4, 4, 5] 和另一个表示循环索引的向量,它们都以小于第一个向量的值开始,例如[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]。当每个循环索引等于其在第一个向量中的对应索引时,将其重置为 1。当所有索引都等于 1 时程序结束。
这似乎是整数分解,但我不知道如何概括。这里的工作原理是什么?实现相同结果的计算效率更高的方法是什么?
提前致谢。
import numpy as np
unityVec = np.ones((10), dtype=np.int) # create a vector of ones
counter = 1 # initialize counter
counterVec = np.ones((10), dtype=np.int) # initialize counter array
counterVec = counterVec + 1 # make counter array > ones array
littleVec = ([3, 3, 3, 3, 4, 6, 3, 4, 4, 5]) # loop reset values
while not (np.array_equal(unityVec, counterVec)): # compare counter to ones vector
counterVec = counterVec + 1
for i in range(10):
if counterVec[i] == littleVec[i]:
counterVec[i] = 1 # reset counterVec element to 1 once it hits limit
#print("Counter: ", counter, "\tIndex: ", i, "\tcounterVec: ", counterVec, "\tlittleVec: ", littleVec)
counter = counter + 1
print("Indices converged after", counter-1, "iterations!")
预期结果:小于或等于第一个向量值的乘积的正整数值。
实验结果:在给定样本值的情况下,索引在 59 次循环后收敛。
【问题讨论】:
-
观察到 59 比 littleVec 的最小公倍数小 1。
-
这更适合math.stackexchange.com,但它是原始数组中所有整数的最小公倍数。
-
感谢 Paul 和 Alexander 简洁的回复。
标签: python numpy factorization