【问题标题】:Generate and fill 2 dimensional array with Numpy使用 Numpy 生成并填充二维数组
【发布时间】:2017-09-16 11:49:58
【问题描述】:

我想用 NumPy 生成一个二维数组,迭代一些变量几次,然后用在 for 迭代中计算的 2 条 float 数据填充二维数组。然后导出到.csv

从技术上讲,我想这样做:

max_array=8000
ARRAY=numpy.zeros(  [max_array*2]   , dtype=float)
ARRAY=numpy.arange(max_array*2).reshape((max_array,2))

for i in range(1,max_array):
######calculations here#######
 array[i,i]=[data1,data2]

numpy.savetxt("output.csv", numpy.asarray(ARRAY), delimiter=",")

不幸的是它不起作用,我的语法很笨拙,可能 [,] 括号是问题所在。如果有人能修复我的 sn-p,我将非常感激。

【问题讨论】:

  • 它会给你什么错误?
  • @Astrom 如果我这样运行它会给出这个错误“ValueError:新数组的总大小必须保持不变”,可能是括号没有正确使用
  • 您不需要两个ARRAY 分配。什么是array(小写名称)?为什么一个插槽有 2 个值?
  • 请发布 Traceback。

标签: python arrays csv numpy multidimensional-array


【解决方案1】:
import numpy as np
max_array = 4
ARRAY = np.arange(max_array*2).reshape((max_array,2))

你已经创建了一个二维数组

>>> ARRAY
array([[0, 1],
       [2, 3],
       [4, 5],
       [6, 7]])
>>> 

ARRAY[i,i] 索引数组中的单个元素

>>> i = 0
>>> ARRAY[i,i]
0
>>> ARRAY[i,i] = 222
>>> ARRAY
array([[222,   1],
       [  2,   3],
       [  4,   5],
       [  6,   7]])

如果你想给一行赋值:

>>> ARRAY[0] = 99, 99
>>> ARRAY
array([[99, 99],
       [ 2,  3],
       [ 4,  5],
       [ 6,  7]])

或者

>>> ARRAY[2,:] = 66, 66
>>> ARRAY
array([[99, 99],
       [ 2,  3],
       [66, 66],
       [ 6,  7]])

下标中的第二个值索引一列

>>> ARRAY[:, 1]
array([99,  3, 66,  7])

>>> ARRAY[:, 1] = 0
>>> ARRAY
array([[99,  0],
       [ 2,  0],
       [66,  0],
       [ 6,  0]])
>>>

ARRAY[i,i] = data1, data2 :尝试将两个东西分配给数组中的单个元素 - 这就是你得到错误的原因。


Numpy 文档
Indexing, Slicing, Iterating
Indexing

【讨论】:

  • 最后一行会给出ValueError: setting an array element with a sequence.
  • 只适用于整数,我需要一个float 数组
  • @PiNewbie,不确定我是否理解您的评论 - ARRAY=numpy.arange(max_array*2).reshape((max_array,2)) 取自您的示例代码 - 它会生成一个整数数组。无论数组类型如何,索引的工作原理都是一样的。
  • @hpaulj - 是的,我注意到了,实际上并没有与 OP 声明的错误相吻合。??
猜你喜欢
  • 1970-01-01
  • 2017-03-22
  • 2015-04-22
  • 2021-06-24
  • 2016-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多