column1
のような列の1つに数字の列が含まれるpythonデータフレームがあります。私はこれらの数字のそれぞれが細胞変異の結果であることを言及しなければならないので、数字n
の細胞は、以下の数字を有する2つの細胞から逸脱する:2*n
および2*n+1
。私はすべての列が特定の番号k
の娘に対応していることを見つけるためにこの列を検索したい。すべて{2*k, 2*k+1, 2*(2*k), 2*(2*k+1), ... }
のcolumn1
を含む行を意味します。ツリー構造を使いたくないのですが、どのように解決策にアプローチできますか?ありがとうデータフレームに格納された一連の数字の中で可能なすべての娘を見つける方法
答えて
醜いが、うまくいくようです。あなたが知る必要があったかもしれないと思うことは、より新しいyield from
の建設です。このコードでは2回使用されます。私は決して考えなかった。
from fractions import Fraction
from itertools import count
def daughters(k):
print ('daughters of cell', k)
if k<=0:
return
if k==1:
yield from count(1)
def locateK():
cells = 1
newCells = 2
generation = 1
while True:
generation += 1
previousCells = cells
cells += newCells
newCells *= 2
if k > previousCells and k <= cells :
break
return (generation, k - previousCells)
parentGeneration, parentCell = locateK()
cells = 1
newCells = 2
generation = 1
while True:
generation += 1
previousCells = cells
if generation > parentGeneration:
if parentCell%2:
firstChildCell=previousCells+int(Fraction(parentCell-1, 2**parentGeneration)*newCells)+1
else:
firstChildCell=previousCells+int(Fraction(parentCell, 2**parentGeneration)*newCells)+1
yield from range(firstChildCell, firstChildCell+int(newCells*Fraction(1,2)))
cells += newCells
newCells *= 2
for n, d in enumerate(daughters(2)):
print (d)
if n > 15:
break
代表的な結果のカップル:
daughters of cell 2
4
5
8
9
10
11
16
17
18
19
20
21
22
23
32
33
34
daughters of cell 3
6
7
12
13
14
15
24
25
26
27
28
29
30
31
48
49
50
ありがとうございましたビル、しかしこれはまさに私が子供のたびに両方の子供を生成する方法を知らない私の問題です。私は '2 * k + 1'も必要ですが、結果をトレースすると、13、15、...は '2 * 6 + 1'と '2 * 7 + 1'にはありません。 – ga97rasl
だからこそ私は「これのようなもの」を書いたのです。 :)私はあなたが何を意味するかについて明確ではなかった。 –
これは質問への答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 14608765) –
2つの配列はbinary expansion starts with 10
だ数字とのためbinary expansion starts with 11
数字のように見えます。
両方の配列が直接見つけることができます:
import math
def f(n=2):
while True:
yield int(n + 2**math.floor(math.log(n,2)))
n += 1
def g(n=2):
while True:
yield int(n + 2 * 2**math.floor(math.log(n,2)))
n += 1
a, b = f(), g()
print [a.next() for i in range(15)]
print [b.next() for i in range(15)]
>>> [4, 5, 8, 9, 10, 11, 16, 17, 18, 19, 20, 21, 22, 23, 32]
>>> [6, 7, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 48]
EDIT:任意の出発点については
、あなたは私はあなたの基準を満たしていると考え、以下を行うことができます。
OEISに対して、それらの配列を確認する:
f(2) - Starting 10 - A004754
f(3) - Starting 11 - A004755
f(4) - Starting 100 - A004756
f(5) - Starting 101 - A004756
f(6) - Starting 110 - A004758
f(7) - Starting 111 - A004759
...
あなたは、単に行うことができることを意味:
import math
def f(k, n=2):
while True:
yield int(n + (k-1) * 2**math.floor(math.log(n, 2)))
n+=1
for i in range(2,8):
a = f(i)
print i, [a.next() for j in range(16)]
>>> 2 [4, 5, 8, 9, 10, 11, 16, 17, 18, 19, 20, 21, 22, 23, 32]
>>> 3 [6, 7, 12, 13, 14, 15, 24, 25, 26, 27, 28, 29, 30, 31, 48]
>>> 4 [8, 9, 16, 17, 18, 19, 32, 33, 34, 35, 36, 37, 38, 39, 64]
>>> 5 [10, 11, 20, 21, 22, 23, 40, 41, 42, 43, 44, 45, 46, 47, 80]
>>> 6 [12, 13, 24, 25, 26, 27, 48, 49, 50, 51, 52, 53, 54, 55, 96]
>>> 7 [14, 15, 28, 29, 30, 31, 56, 57, 58, 59, 60, 61, 62, 63, 112]
# ... where the first number is shown for clarity.
- 1. 可能なすべての部分文字列を見つける方法
- 2. GDBでスタックに格納された変数を見る方法
- 3. ルアでは、オブジェクトが格納されているキーを見つける方法
- 4. mXn行列のすべての可能な一意のパスを見つける
- 5. 文字列中のregexpを見つけて変数につける方法
- 6. 文字列の可能なすべてのペアを見つける - VBA
- 7. C#(serialPortクラス)で使用可能なボーレートをすべて見つける方法
- 8. 可能なすべての位置を見つけるアルゴリズム
- 9. OCaml - 反復可能なすべてのバリエーションを見つける
- 10. Socrata、利用可能なすべてのデータセットを見つける
- 11. Pythonで一連の値を格納する方法
- 12. すべての連絡先を連絡先データベースから一覧に読み込んで格納する方法
- 13. 連続して格納されていないSQLレコードの違いを見つける
- 14. アレイリストに格納されているtcp-clientのIPアドレスを見つける簡単な方法。
- 15. ROSパッケージのすべての実行可能ファイルを見つける方法?
- 16. 変数の可能な値をローカルマクロに格納する方法は?
- 17. Oracleに格納されたprocの従属要素を見つける
- 18. カードを交換するための可能な方法のすべてを見つける
- 19. サイクルなしでグラフ内のすべての可能なパスを見つける
- 20. 一連の配列を格納する方法
- 21. mysqlデータベースに格納された2回の時間の交点を見つける方法
- 22. セットのパーティション - 結果を一連のネストされたリストに格納する
- 23. Javaの配列リストにオブジェクトに格納されている値を見つける方法
- 24. 文字列に格納された文字 - ランダム化されたときに別の文字列変数に格納する方法
- 25. 変数に格納されている連想配列のアクセスキー
- 26. 文字と数字の間の可能な双対を見つける
- 27. java:arrayListに格納されたインデックスの関連値を取得する方法
- 28. データフレームに単一の値として生ベクターを格納する
- 29. 配列に格納されている最高と最低の番号を見つける方法は?
- 30. 数字の中で最大の正方形を見つける方法(Java)
あなたは* K *の観点から、一連の複数の用語を供給していただけますか? –
はい私の列は次のようなものです:1,2,3,4,5,6,7,8,9、... 1は最初のセルに対応します。最初のセルは次に2と3に区別されます。次に2は4と5に差があり、3が6と7に区別されます。つまり、2の場合、これらの項目{4,5,8,9,10、 11,16,17,18,19、...}、3番はこれらのアイテム{6,7,12,13,14,15,24,25,26,27、...} 。 – ga97rasl
ありがとう、私はこれについて考える必要があります。 –