質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2019閲覧

pythonの二次元リストで各要素に数値を掛け算する方法

simpkins

総合スコア5

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/10/19 10:10

載せているのはプログラムの一部です。
日射量を表すリスト(light)の各要素に値を掛け算したいのですが、solar1だとエラーが出ないのにsolar2だとエラーが出てしまいます。どこを変更すれば改善するでしょうか。

light1=[1,2,3,4]
solar1=[0.7 * 1 *Powerpv,0.7 * 2 *Powerpv,0.7 * 3 *Powerpv,0.7 * 4 *Powerpv]

light2=[[1,2,3,4],[5,6,7,8]]
solar2=[0.7 * 1 *Powerpv,0.7 * 2 *Powerpv,0.7 * 3 *Powerpv,0.7 * 4 *Powerpv],[0.7 * 5 *Powerpv,0.7 * 6 Powerpv,0.7 * 7Powerpv,0.7 * 8 *Powerpv]]
みたいになるイメージです。

コード from __future__ import division from pulp import LpVariable, LpProblem, LpStatus, lpSum, value import numpy as np import random,pulp # PV parameters Powerpv1 = LpVariable('Powerpv', 0, None) Powerpv2 = LpVariable('Powerpv', 0, None) light1=[random.uniform (0, 10) for i in range(24)] #日射量 solar1=[0.7 * q * Powerpv1 for q in light1] #pv発電量 n=3 #繰り返し数 for k in range(n): light2=[[np.random.uniform (0,10) for i in range(24)] for k in range(n)] #日射量 solar2=[0.7 * r *Powerpv2 for r in light2] #pv発電量 print(solar1) print(solar2)

エラー
TypeError Traceback (most recent call last)
<ipython-input-15-73dd3b63f0e9> in <module>
15 for k in range(n):
16 light2=[[np.random.uniform (0,10) for i in range(24)] for k in range(n)] #日射量
---> 17 solar2=[0.7 * r *Powerpv2 for r in light2] #pv発電量
18
19 print(solar1)

<ipython-input-15-73dd3b63f0e9> in <listcomp>(.0)
15 for k in range(n):
16 light2=[[np.random.uniform (0,10) for i in range(24)] for k in range(n)] #日射量
---> 17 solar2=[0.7 * r *Powerpv2 for r in light2] #pv発電量
18
19 print(solar1)

TypeError: can't multiply sequence by non-int of type 'float'

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

Powerpvの中身がよくわかりませんが、恐らくエラーが起きているのは以下のようなことだと思われます。
light2はリスト内にリストがあるので、要素を1段階取り出しただけではリストが出てきます。そして、リストに整数を掛けるとリスト内要素の数値ではなくリストそれ自体が増えます。

python3

1light1=[1,2,3,4] 2print([l*2 for l in light1]) # 要素(整数)と整数の積 3# [2, 4, 6, 8] 4 5light2=[[1,2,3,4],[5,6,7,8]] 6print([l*2 for l in light2]) # 要素(リスト)と整数の積 7# [[1, 2, 3, 4, 1, 2, 3, 4], [5, 6, 7, 8, 5, 6, 7, 8]] 8 9light2=[[1,2,3,4],[5,6,7,8]] 10print([l*0.5 for l in light2]) # 要素(リスト)とfloatの積 11# TypeError: can't multiply sequence by non-int of type 'float'

なので、とりあえず動くようにするなら下記のように入れ子を増やす感じでしょうか。

python3

1n=3 #繰り返し数 2 3for k in range(n): 4 light2=[[np.random.uniform (0,10) for i in range(24)] for k in range(n)] #日射量 5 solar2=[[0.7 * s *Powerpv2 for s in r] for r in light2] #pv発電量

投稿2020/10/19 10:29

jeanbiego

総合スコア3966

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

simpkins

2020/10/20 01:00

入れ子を増やせばよかったんですね(笑) 勉強になりました。ありがとうございます。
guest

0

light2が2次元リストになっていますので、solar2=[0.7 * r *Powerpv2 for r in light2]におけるrがリストとなり、掛け算に失敗しています。

修正案1: light2を1次元リストにする

Python

1for k in range(n): 2 light2=[np.random.uniform (0,10) for i in range(24*n)] #日射量 ★修正 3 solar2=[0.7 * r *Powerpv2 for r in light2] #pv発電量

修正案2: rをndarry型としてブロードキャスト計算する

Python

1for k in range(n): 2 light2=[[np.random.uniform (0,10) for i in range(24)] for k in range(n)] #日射量 3 solar2=[np.array(r) * 0.7 * Powerpv2 for r in light2] #pv発電量 ★修正

投稿2020/10/19 10:24

toast-uz

総合スコア3266

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問