簡體   English   中英

Python numpy數組根據行為每一列賦值

[英]Python numpy array assign values to each column according to row

我想為二維 numpy 數組中的每一行分配特定於行的值。 特別是,每一行都應該包含其行號的倒數值。 換句話說,第 1 行中的所有列的值都應該是 1,第 2 行中的所有列都應該是 1/2,第 3 行中的所有列都應該是 1/3,依此類推。 我試過這個:

m = 3
n = 10

train = np.empty([n,m], float)

for curr_n in range(n):
    train[curr_n,:] = 1/(curr_n+1)

print train

但輸出是:

[[ 1.  1.  1.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]
 [ 0.  0.  0.]]

我究竟做錯了什么? 我在開始時使用了“float”,但除了第一行之外,我仍然得到了實心 0 整數。

Python 3 中添加了隱式類型轉換,因此您的原始代碼將可以正常工作,如下所示:

from __future__ import division

m = 3
n = 10

train = np.empty([n,m], float)

for curr_n in range(n):
   train[curr_n,:] = 1/(curr_n+1)

print train

關於__future__模塊的一些信息可以在官方文檔future 模塊中看到

或者,正如 sshashank124 在他的回答中和我在評論中所說的那樣,您可以使用 1. 或 1.0 來強制浮動行為。

你有一個簡單的type問題。 在您的往復中使用1.0而不是1 以下工作:

m = 3
n = 10

train = np.empty([n,m])

for curr_n in range(n):
    train[curr_n,:] = 1.0/(curr_n+1)   #converted 1 to 1.0

print train

解釋

盡管您可能認為 numpy 默認處理浮點數,但在這種情況下,python 有時間計算逆數之后,numpy 數組被分配了值。 然后, python將您的浮點數截斷為一個 int,而 numpy 無辜地將那個偷偷摸摸的int轉換為一個float ,正如它應該的那樣,並最終承擔所有責任

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM