How do I replace a value in a matrix which corresponding to another matrix?
For example
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
And I want to get a matrix c:
c = [0.5, 0.8, 0, 0.11, 0, 0]
That's like if the i in a = ww for ww,ee in n for n in b, then replace with ee else 0
I try some if and else command and here is my code
for n in b:
for t,y in n:
for tt in a:
mmm = [y if t == ''.join(tt) else ''.join(tt)]
print(mmm)
But it failed. How should I code for this situation?
python python-3.x numpy if-statement replace
add a comment |
For example
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
And I want to get a matrix c:
c = [0.5, 0.8, 0, 0.11, 0, 0]
That's like if the i in a = ww for ww,ee in n for n in b, then replace with ee else 0
I try some if and else command and here is my code
for n in b:
for t,y in n:
for tt in a:
mmm = [y if t == ''.join(tt) else ''.join(tt)]
print(mmm)
But it failed. How should I code for this situation?
python python-3.x numpy if-statement replace
3
Shouldn't the last value inc
be0.23
?
– Austin
Nov 18 '18 at 17:49
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48
add a comment |
For example
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
And I want to get a matrix c:
c = [0.5, 0.8, 0, 0.11, 0, 0]
That's like if the i in a = ww for ww,ee in n for n in b, then replace with ee else 0
I try some if and else command and here is my code
for n in b:
for t,y in n:
for tt in a:
mmm = [y if t == ''.join(tt) else ''.join(tt)]
print(mmm)
But it failed. How should I code for this situation?
python python-3.x numpy if-statement replace
For example
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
And I want to get a matrix c:
c = [0.5, 0.8, 0, 0.11, 0, 0]
That's like if the i in a = ww for ww,ee in n for n in b, then replace with ee else 0
I try some if and else command and here is my code
for n in b:
for t,y in n:
for tt in a:
mmm = [y if t == ''.join(tt) else ''.join(tt)]
print(mmm)
But it failed. How should I code for this situation?
python python-3.x numpy if-statement replace
python python-3.x numpy if-statement replace
edited Nov 18 '18 at 17:55
Austin
10.2k3828
10.2k3828
asked Nov 18 '18 at 17:37
wayne64001wayne64001
475
475
3
Shouldn't the last value inc
be0.23
?
– Austin
Nov 18 '18 at 17:49
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48
add a comment |
3
Shouldn't the last value inc
be0.23
?
– Austin
Nov 18 '18 at 17:49
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48
3
3
Shouldn't the last value in
c
be 0.23
?– Austin
Nov 18 '18 at 17:49
Shouldn't the last value in
c
be 0.23
?– Austin
Nov 18 '18 at 17:49
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48
add a comment |
3 Answers
3
active
oldest
votes
chain
+ dict
+ list comprehension
Your b
mapping is a list of lists, you can flatten this into an iterable of tuples via chain.from_iterable
. Then feed to dict
to create an efficient mapping.
Finally, use a list comprehension with dict.get
for the desired result. Just remember to convert the values of a
from str
to int
.
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
This iterates through list a
comparing it's value with first value of tuples in b
list. This appends the second value of tuple to output list if the first value of tuple matches with the value in a
:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst =
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
You can convert your double-list of mappings into a lookup dictionary and use a list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
Output:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
Related:
- dict.get(key[, default])
- Why dict.get(key) instead of dict[key]?
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53363713%2fhow-do-i-replace-a-value-in-a-matrix-which-corresponding-to-another-matrix%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
chain
+ dict
+ list comprehension
Your b
mapping is a list of lists, you can flatten this into an iterable of tuples via chain.from_iterable
. Then feed to dict
to create an efficient mapping.
Finally, use a list comprehension with dict.get
for the desired result. Just remember to convert the values of a
from str
to int
.
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
chain
+ dict
+ list comprehension
Your b
mapping is a list of lists, you can flatten this into an iterable of tuples via chain.from_iterable
. Then feed to dict
to create an efficient mapping.
Finally, use a list comprehension with dict.get
for the desired result. Just remember to convert the values of a
from str
to int
.
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
chain
+ dict
+ list comprehension
Your b
mapping is a list of lists, you can flatten this into an iterable of tuples via chain.from_iterable
. Then feed to dict
to create an efficient mapping.
Finally, use a list comprehension with dict.get
for the desired result. Just remember to convert the values of a
from str
to int
.
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
chain
+ dict
+ list comprehension
Your b
mapping is a list of lists, you can flatten this into an iterable of tuples via chain.from_iterable
. Then feed to dict
to create an efficient mapping.
Finally, use a list comprehension with dict.get
for the desired result. Just remember to convert the values of a
from str
to int
.
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b_dict = dict(chain.from_iterable(b))
c = [b_dict.get(i, 0) for i in map(int, a)]
print(c)
[0.5, 0.8, 0, 0.11, 0, 0.23]
answered Nov 18 '18 at 18:16
jppjpp
100k2161111
100k2161111
add a comment |
add a comment |
This iterates through list a
comparing it's value with first value of tuples in b
list. This appends the second value of tuple to output list if the first value of tuple matches with the value in a
:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst =
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
This iterates through list a
comparing it's value with first value of tuples in b
list. This appends the second value of tuple to output list if the first value of tuple matches with the value in a
:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst =
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
add a comment |
This iterates through list a
comparing it's value with first value of tuples in b
list. This appends the second value of tuple to output list if the first value of tuple matches with the value in a
:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst =
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
This iterates through list a
comparing it's value with first value of tuples in b
list. This appends the second value of tuple to output list if the first value of tuple matches with the value in a
:
from itertools import chain
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
b = list(chain.from_iterable(b))
lst =
for x in a:
for y, z in b:
if y == int(x):
lst.append(z)
break
else:
lst.append(0)
print(lst)
# [0.5, 0.8, 0, 0.11, 0, 0.23]
edited Nov 18 '18 at 18:01
answered Nov 18 '18 at 17:51
AustinAustin
10.2k3828
10.2k3828
add a comment |
add a comment |
You can convert your double-list of mappings into a lookup dictionary and use a list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
Output:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
Related:
- dict.get(key[, default])
- Why dict.get(key) instead of dict[key]?
add a comment |
You can convert your double-list of mappings into a lookup dictionary and use a list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
Output:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
Related:
- dict.get(key[, default])
- Why dict.get(key) instead of dict[key]?
add a comment |
You can convert your double-list of mappings into a lookup dictionary and use a list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
Output:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
Related:
- dict.get(key[, default])
- Why dict.get(key) instead of dict[key]?
You can convert your double-list of mappings into a lookup dictionary and use a list-comp:
a = ['1', '2', '3', '4', '5', '6']
b = [[(1, 0.5), (2, 0.8)], [(4, 0.11), (6, 0.23)]]
# convert b to a dictionary:
d = {str(k):v for tup in b for k,v in tup} # stringify the lookup key value
print(d)
# apply the lookup to a's values
result = [d.get(k,0) for k in a]
print(result)
Output:
# the lookup-dictionary
{'1': 0.5, '2': 0.8, '4': 0.11, '6': 0.23}
# result of list c,omprehension
[0.5, 0.8, 0, 0.11, 0, 0.23]
Related:
- dict.get(key[, default])
- Why dict.get(key) instead of dict[key]?
answered Nov 18 '18 at 18:16
Patrick ArtnerPatrick Artner
23.6k62443
23.6k62443
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53363713%2fhow-do-i-replace-a-value-in-a-matrix-which-corresponding-to-another-matrix%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
3
Shouldn't the last value in
c
be0.23
?– Austin
Nov 18 '18 at 17:49
[dict(sum(b,)).get(int(i),0) for i in a]
– Onyambu
Nov 18 '18 at 21:48