【发布时间】:2022-01-17 15:06:57
【问题描述】:
我有以下数组
import numpy as np
import CustomClass
# Total = 24
height = 4
width = 6
a = np.empty((height, width), dtype=object)
for row in range(self.height):
for col in range(self.width):
self.a[row, col] = CustomClass()
我想更改部分数组的属性(填充我的自定义类)。 例如,我想从 element[0,0] 开始更改 12 个元素,然后逐行更改。理想情况下,我会做一些类似的事情
change=11
for i in range(change):
a[i].value=True
结果将类似于以下内容(0:未更改,x:已更改)
x x x x x x
x x x x x 0
0 0 0 0 0 0
0 0 0 0 0 0
我的数组的问题在于,我首先需要将其展平,然后才能执行此类操作。或者我应该先计算多少列和行,然后才能索引数组本身。是否有一个 numpy 函数,这样我就可以逐个元素(逐行)迭代数组元素。
希望我的解释清楚吗?
【问题讨论】:
-
如果你的 numpy 是 2-d,那么你可以计算(行数)的 mod 和列来做到这一点。但是有什么不使用 flatten 和 reshape 的具体原因吗?
-
重塑或展平数组不会在内存中改变它,它只会改变元数据。您可以随心所欲地展平和重塑,而不会影响性能。
-
性能和尝试学习新功能是提出这个问题的原因。但似乎扁平化和重塑就足够了。但是,我仍然需要使用 for 循环来更改 te 值。任何建议以不同的方式执行此操作,或者我不能避免 for 循环
-
展平后,只要形状匹配,就可以像
full_array[0:change] = new_values一样使用切片 -
感谢您的建议,但是我的数组包含我想更改属性而不是用 new_values 替换它的对象