2017-02-16 10 views
1

これはhereの続きです。1つの参照配列に基づいて要素を配列に追加および削除します

Iは、配列aを有し、アレイbaはの要素とb(要素ごと)のすべての要素を置換するために、塩基配列としてaを有し、そこb .Is方法より小さくても大きくなる可能性がある場合a

たとえば、これはab限り多くの要素があるために動作します:今

import numpy as np 

a = np.array([1,2,3,4,5,6,7,8]) 
b = np.array([[1,2,3,4],[11,22,33,44]]) 
print(b[0].shape) 

i= 0 
for el in b: 
    for idx,x in enumerate(el): 
     el[idx] = a[i] 
     i+= 1 

print(b) 
[[1 2 3 4] 
[5 6 7 8]] 

を、例えば、aをすることができます:

a = np.array([1,2,3,4,5])

b

b = np.array([11,22,33,44])

bのすべての4つの要素がaの最初の4つの要素によって置き換えられているので、私が望む結果がb = [1,2,3,4,5]であると私はaと同じサイズであるためにbaの最後)に1つの以上の要素を追加し、私の参照アレイ)。

Iしている場合:

a = np.array([1,2,3])b = np.array([6,7,8,9])を、次いで、結果Bの配列は次のようになりますb = [1,2,3]ので、私はbから一つの要素を削除(aと同じ大きさ)とa要素と残りの部分を置き換え。今

、全体の問題があることである:私はaサイズの要素の倍数の番号を持つ配列を持つことになります

ので、a = np.array([1,2,3,4,5])

arr = np.array([1,2,3,4,5,6,7,8,9,10])

b = np.array([[0,1,2,3], [4,5,6,7]])

私はaサイズ(したがって、5)の倍数でarrからbに要素を交換したいです。

ので、Bを想定し、最終的なb = [ [1,2,3,4,5], [6,7,8,9,10])

+0

はあなただけ書くことができますしたいと思います - > B = NPを。配列(a)? – Marco

+0

ビットはここでは 'arr'と' a'の定義と混同しています。あなたの最初の例で 'arr'とは何かを教えてください。それは 'a = np.array([1])'と 'arr = np.array([1,2,3,4,5])'ですか? – Rohanil

+0

@Rohanil:最初の例では、 'arr'はbの要素に過ぎませんでした(私は' el'に名前を変更しました)。一般的には、すべての 'b'要素を' arr'値で 'a'サイズの倍数で置換したい(私の例では5要素ごとに) – George

答えて

2

てみリストのスライスは、常に2Dまたは1Dのいずれかである

import numpy as np 

arr = np.array([1,2,3,4,5,6,7,8,9,10]) 
a = np.array([1,2,3,4,5]) 
b = np.array([[1,2,3,4],[11,22,33,44]]) 
print(b[0].shape) 

list_arr = arr.tolist() 
slice_factor = a.size 
j=0 

temp = [] 

for j in range(0,len(list_arr),slice_factor): 
    k = min(j + slice_factor,len(list_arr)) 
    temp.append(list_arr[j:k]) 

b = np.array(temp) 

print(b) 
[[1 2 3 4 5] 
[6 7 8 9 10]] 
+0

ありがとうございます!そして、b.size/a.size <1(上書きされた場合)でもすべてのサイズで動作します – George

+0

それです。 。あなたが求めた結果を出さない。 –

+0

あなたの出力を正しいものに修正してください。結果は '[[1、2、3、4、5]、 [6,7,8,9,10] 3 4] [5 6 7 8]] ' – George

3

私はあなたが

b = arr.reshape(-1, a.size) 
b 
Out[291]: 
array([[ 1, 2, 3, 4, 5], 
     [ 6, 7, 8, 9, 10]]) 
+0

ありがとう!素晴らしいです!(私はすでに受け入れているのでupvoted)! – George

+0

受け入れられた答えには 'b = [[1 2 3 4] [5 6 7 8]]'という出力があります。これはサイズと値が異なります私の答え。どちらが正しい? –

+0

いいえ、あなたがコードを実行しても同じです。ちょうどポスターが間違った出力を置いた場合(私は彼に通知します) – George

関連する問題