用类实例替换数组中的元素

2023-12-04

这类似于this所以请先阅读它以了解我想要做什么。

现在,我想在有类实例时进行替换。例如:

import numpy as np

class B():
    def __init__(self, a,b):
        self.a = a
        self.b = b


arr = np.array([ [1,2,3,4,5],[6,7,8,9,10] ])

b1 = np.array([B(100,'a'),
               B(11,'b'),
               B(300,'c'),
               B(33,'d')])

b2 = np.array([B(45,'a'),
              B(65,'b'),
              B(77,'c'),
              B(88,'d')])

# My d array will be like that and I will have to 
# run 3 loops as below . I can't change that
d = np.array([[b1],[b2]],dtype=object)

# Replace the elements
for i in d:
    for y in i:
        for idx,el in enumerate(y): 
            #y[idx].a = arr.reshape(-1,5) # 5 is the size of every sublength of arr
            #print(y[idx].a)
            pass

# Show the updated values
for i in d:       
    for y in i:
        for idx,x in enumerate(y):
            print(y[idx].a)

我无法使用b = arr.reshape(-1, a.size)因为这必须在循环之外运行。但是,正如我所说b数组将是y[idx].value,所以我不能只将它放在第三个循环中,因为我会获得错误的结果,也不能将它放在第三个循环之外,因为我将无法访问value类实例的一部分。

我希望我的结果是:

b1 = np.array([B(1,'a'),
               B(2,'b'),
               B(3,'c'),
               B(4,'d'),
               B(5,'d')])

b2 = np.array([B(6,'a'),
              B(7,'b'),
              B(8,'c'),
              B(9,'d'),
              B(10,'d')])

所以,我只想填写aB 类实例的部分示例。 请注意,和以前一样(在上一个问题中)B被扩展以保存来自的所有 5 个值arr.

简而言之,检查每个子列表的长度arr(现在是 5), 并更新d因此,如果b1 and b2有 4 个值,它们必须变成 5 个值(前 5 个值来自arr以及接下来的 5 个值arr).


所以我添加

print(d.shape)
print(d)

and get

2249:~/mypy$ python3 stack42283851.py 
(2, 1, 4)
[[[<__main__.B object at 0xb71d760c> <__main__.B object at 0xb71d7aac>
   <__main__.B object at 0xb71d7acc> <__main__.B object at 0xb71e5cec>]]

 [[<__main__.B object at 0xb391718c> <__main__.B object at 0xb39171ac>
   <__main__.B object at 0xb39171cc> <__main__.B object at 0xb39171ec>]]]

添加一个__repr__ to B I get

1231:~/mypy$ python3 stack42283851.py 
(2, 1, 4)
[[[B(100, a) B(11, b) B(300, c) B(33, d)]]

 [[B(45, a) B(65, b) B(77, c) B(88, d)]]]

Adding

import itertools
for a,b in itertools.zip_longest(arr[0,:],b1):
     print(a,b)

produces

1 B(100, a)
2 B(11, b)
3 B(300, c)
4 B(33, d)
5 None

将其更改为:

newlist = []
for a,b in itertools.zip_longest(arr[0,:],b1):
    if b is not None:
        new_b = B(a, b.b)
        last_b = b
    else:
        new_b = B(a, last_b.b)
    newlist.append(new_b)
print(np.array(newlist))

produces

[B(1, a) B(2, b) B(3, c) B(4, d) B(5, d)]

将其分配给b1,并重复a[1,:] and b2.

为了更干净一点,我可以这样写new_b代码作为函数,并将循环重写为列表理解。

是的,我可以修改b到位,例如

b.a = a

但因为我需要创建一个新的B对象来替换None, 何必。我无法添加新的B反对原文b1大批。所以通过列表创建新数组更简单。


我可以就地更改d and b1 with:

def replace(a,b):
    b.a = a
f = np.frompyfunc(replace, 2, 1)
f(arr[:,None,:4], d)      # produces array of None; ignore
print(d)
print(b1)

[[[B(1, a) B(2, b) B(3, c) B(4, d)]]  # chgd d

[[B(6, a) B(7, b) B(8, c) B(9, d)]]]
[B(1, a) B(2, b) B(3, c) B(4, d)]    # chgd b1

我只是在使用frompyfunc作为一种懒人的广播方式arr反对d并迭代所有元素。请注意,我必须改变arr匹配d形状。而且这并没有添加任何新的B()。显然你不能就地做到这一点。


My B is

class B():
    def __init__(self, a,b):
        self.a = a
        self.b = b
    def __repr__(self):
        return 'B(%s, %s)'%(self.a, self.b)

和谁玩frompyfunc多一点:

getB_b = np.frompyfunc(lambda x: x.b, 1,1)   # fetch b attributes
print(getB_b(d))
#[[['a' 'b' 'c' 'd']]
#
# [['a' 'b' 'c' 'd']]]

mkB = np.frompyfunc(B, 2,1)   # build array of B() with broadcasting
print(mkB(arr, ['a','b','c','d','e']))
# [[B(1, a) B(2, b) B(3, c) B(4, d) B(5, e)]
#  [B(6, a) B(7, b) B(8, c) B(9, d) B(10, e)]]

print(mkB(arr[:,:4], getB_b(d[:,0,:])))
# [[B(1, a) B(2, b) B(3, c) B(4, d)]
#  [B(6, a) B(7, b) B(8, c) B(9, d)]]

编辑评论

arr1 = np.array([ [1,2],[6,7] ])
newlist = []
for a,b in itertools.zip_longest(arr1[0,:],b1):
    if b is not None:
        new_b = B(a, b.b)
        last_b = b
    else:
        new_b = B(a, last_b.b)
    newlist.append(new_b)
print(np.array(newlist))

produces

[B(1, a) B(2, b) B(None, c) B(None, d)]

When arr较短,aNone(代替b);所以我们需要测试一下

def foo(arr,bn):
    newlist = []
    for a,b in itertools.zip_longest(arr,bn):
        print(a,b)
        if a is None:
            pass
        else:
            if b is not None:
                new_b = B(a, b.b)
                last_b = b
            else:
                new_b = B(a, last_b.b)
            newlist.append(new_b)
    return newlist
print(np.array(foo(arr1[0,:],b1)))  # arr1 shorter
print(np.array(foo(arr[0,:], b2)))  # arr longer 

testing:

1 B(1, a)
2 B(2, b)
None B(3, c)
None B(4, d)
[B(1, a) B(2, b)]

1 B(6, a)
2 B(7, b)
3 B(8, c)
4 B(9, d)
5 None
[B(1, a) B(2, b) B(3, c) B(4, d) B(5, d)]

没什么特别或神奇的;只是确保我得到的问题if测试和缩进正确。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用类实例替换数组中的元素 的相关文章

  • 在 Python 2.7 中出现“ImportError:无法导入名称 HTTPSConnection”错误

    我正在尝试在 AWS ElasticBeanstalk 中部署 django 当我按照所示步骤操作时here http docs aws amazon com elasticbeanstalk latest dg create deploy
  • 如何(重新)命名 pandas 数据框中的空列标题而不导出到 csv

    我有一个熊猫数据框df1带有一个索引列和一系列未命名的值 我想为未命名的系列指定一个名称 到目前为止 我知道的唯一方法是导出到df1 csv using df1 to csv df1 csv header Signal 然后使用以下命令重新
  • 在Python中,如何将矩阵逆时针旋转90度?

    gt gt gt def rotate matrix k List List int For example if I have m 1 2 3 2 3 3 5 4 3 rotate matrix m should give me 3 3
  • Python 转换矩阵

    我有一个如下所示的列表 2 1 3 1 2 3 1 2 2 2 我想要的是一个转换矩阵 它向我显示如下序列 1 后跟 1 的频率是多少 1 后面跟着 2 的频率是多少 1 后跟 3 的频率是多少 2 后跟 1 的频率是多少 2 后跟 2 的
  • 为什么在连接两个字符串时 Python 比 C 更快?

    目前我想比较 Python 和 C 用来处理字符串的速度 我认为 C 应该比 Python 提供更好的性能 然而 我得到了完全相反的结果 这是 C 程序 include
  • 使用pathlib获取主目录

    翻看新的pathlib在 Python 3 4 中 我注意到没有任何简单的方法来获取用户的主目录 我能想到的获取用户主目录的唯一方法是使用旧的os path像这样的库 import pathlib from os import path p
  • 用 Python 绘制直方图

    我有两个列表 x 和 y x 包含字母表 A Z Y 包含它们在文件中的频率 我尝试研究如何在直方图中绘制这些值 但在理解如何绘制它方面没有成功 n bins patches plt hist x 26 normed 1 facecolor
  • Py2exe - Pmw WindowsError:[错误 3]

    我正在尝试使用 Py2exe 构建独立的可执行文件 我已经导入了 Pmw 类 当我运行独立可执行文件时 出现以下错误 Traceback most recent call last File py line 9 in
  • 高级描述熊猫

    有没有像 pandas 那样更高级的功能 通常我会继续这样 r pd DataFrame np random randn 1000 columns A r describe 我会得到一份很好的总结 就像这样 A count 1000 000
  • 更改 Matplotlib 投影轴的背景颜色

    我正在尝试使用 Cartopy 创建一个图形 该图形需要在未投影的轴上绘制投影轴 这是一个尽可能简单的代码版本 它将轴上的内容替换为背景颜色 import matplotlib pyplot as plt import cartopy cr
  • 如何通过 Python Requests 库使用基本 HTTP 身份验证?

    我正在尝试在 Python 中使用基本的 HTTP 身份验证 我正在使用Requests https docs python requests org 图书馆 auth requests post http hostname auth HT
  • 从 wxPython 事件处理程序中调用函数

    我正在努力寻找一种在 wxPython 事件处理函数中使用函数的方法 假设我有一个按钮 单击该按钮时 它会使用事件处理程序运行一个名为 OnRun 的函数 但是 用户忘记单击 OnRun 按钮之前的 RadionButton 我想弹出一个
  • Python 2.7 缩进错误[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 这个问题是由拼写错误或无法再重现的问题引起的 虽然类似的问题可能是on topic help on topic在这里 这个问题的解决方式不
  • 无需访问 Internet 即可部署 Django 的简单方法?

    我拥有的是使用 Django 开发的 Intranet 站点的开发版本以及放置在 virtualenv 中的一些外部库 它运行良好 我可以在任何具有互联网连接的计算机上使用相同的参数 使用 pip 轻松设置 virtualenv 但是 不幸
  • Python:如何在不先创建整个列表的情况下计算列表的总和?

    通常我们必须 1 声明一个列表 2 使用以下方法计算该列表的总和sum 但现在我希望指定一个以 1 开头 间隔为 4 100 个元素的列表 如下所示 1 5 9 13 17 21 25 29 33 37 我不想涉及数学公式 所以 1 如何在
  • 如何使用 enumerate 来倒数?

    letters a b c 假设这是我的清单 在哪里for i letter in enumerate letters 将会 0 a 1 b 2 c 我怎样才能让它向后枚举 如 2 a 1 b 0 c 这是一个很好的解决方案并且工作完美 i
  • Python 相当于 Scala 案例类

    Python 中是否有与 Scala 的 Case Class 等效的东西 就像自动生成分配给字段而无需编写样板的构造函数一样 当前执行此操作的现代方法 从 Python 3 7 开始 是使用数据类 https www python org
  • 两种 ODE 求解器之间的差异

    我想知道 两者之间有什么区别ODEINT and solve ivp用于求解微分方程 它们之间有什么优点和缺点 f1 solve ivp f 0 1 y0 y0 is the initial point f2 odeint f y0 0 1
  • 使用 pandas 单元格中列表的长度选择行[重复]

    这个问题在这里已经有答案了 我有一张表 df a b c 1 x y x 2 x z c d 3 x t e f g 只是想知道如何使用 c 列的长度选择行 such as df loc len df c gt 1 我知道这是不对的 正确的
  • 为boost python编译的.so找不到模块

    我正在尝试将 C 代码包装到 python 中 只需一个类即可导出两个函数 我编译为map so 当我尝试时import map得到像噪音一样的错误 Traceback most recent call last File

随机推荐

  • 如何移动对话中的所有消息?

    我需要知道如何同时移动对话中的所有消息 我的宏当前显示为 Sub Archive Set ArchiveFolder Application GetNamespace MAPI GetDefaultFolder olFolderInbox
  • 如何扩展 KineticJS 形状

    对于 KineticJS 版本4 0 0或者更少的形状扩展了一个类并且可以通过以下方式扩展 var MyCircle Kinetic Circle extend init function config this super config
  • 尝试在 SSE 编程中使用 and 掩码添加 __m128

    我正在尝试使用比较操作的结果添加到 SSE 变量 我刚刚意识到 当使用 mm cmplt ps如果结果为真 则操作将返回 NAN 因为无法表示 0xffffffff 这对我来说没有用 m128 va m128 vb m128 result
  • .NET Core 3.1 始终加密

    使用 NET Core 3 1 和 SQL Always Encrypted 时出现以下错误 3 1支持这个吗 也许我在这里遗漏了一些东西 Keyword not supported column encryption setting 目前
  • 是否可以在 Android 中创建某种全局异常处理程序?

    我的应用程序包括一系列活动 用户必须以线性方式进行这些活动 假设这一系列活动如下所示 A 代表主菜单 B C D E 用户的操作过程如下 A gt B gt C gt D gt E 在这些活动中 用户必须输入数据或允许设备自动获取数据 例如
  • 使用 Symfony Messenger 异步发送电子邮件时如何翻译电子邮件?

    我将 Symfony 邮件程序配置为使用 Messenger 发送电子邮件 https symfony com doc current mailer html sending messages async 我的电子邮件有两种语言 我依靠请求
  • 将字符向量转换为时间?

    我想将以下字符向量转换为时间变量 times lt c 9 9 2015 16 03 13 9 9 2015 17 03 13 9 9 2015 17 56 38 9 9 2015 17 57 29 9 9 2015 19 52 55 9
  • 如何读取 FastCGI 请求的所有输出?

    我正在尝试使用 Rust 向 PHP 文件发出请求FastCGI协议 感谢以下答案 我得到了这段代码我之前的问题 use std os unix net UnixStream use std io Read Write use std st
  • 将 DIV 缩小到换行到其最大宽度的文本?

    将 div 收缩包装到某些文本非常简单 但是 如果文本由于最大宽度 例如 而换行到第二行 或更多行 则 DIV 的大小不会缩小到新换行的文本 它仍然扩展到断点 在本例中为最大宽度值 导致 DIV 右侧有相当多的边距 当想要将此 DIV 居中
  • Swift iOS 9 NSURLErrorDomain 错误 -1004

    我在 iOS 9 和 iOS 8 上使用 Swift 2 和 Alamofire 在 iOS 8 中 我对 API 的所有请求都工作正常 在 iOS 9 中 它们立即失败 并显示 1004 NSURLErrorDomain 并显示消息 无法
  • C#、Html 敏捷性、选择 div 标签内的每个段落

    例如 如何选择 div 标签中的每个段落 div p Hi p p Help Me Please p p Thankyou p 我已经下载了 Html Agility 并在我的程序中引用 我所需要的只是段落 可能有不同数量的段落 并且有大量
  • 将 jsonb 列值转换为 PostgreSQL 中的多列

    假设我在 PostgreSQL 中有一个表 其中包含以下列 CREATE TABLE sample id int jsonb jsonb date date 我插入了这两行 INSERT INTO sample id jsonb date
  • 如何使用 json.net 忽略类中的属性(如果为 null)

    我在用Json NET将类序列化为 JSON 我有这样的课程 class Test1 JsonProperty id public string ID get set JsonProperty label public string Lab
  • 根据另一列中的行更新列行

    我在 R 中有一个数据集 如下所示 我正在尝试更新 描述 列中的空单元格 以获取 值 列中的 0 值 Criteria Value Description Success 0 Success 21 look up Success 20 re
  • Android 检查 LocationManager 的权限

    我试图在单击活动布局中的按钮时显示 GPS 坐标 以下是单击按钮时调用的方法 public void getLocation View view TextView tv TextView findViewById R id gps coor
  • std::enable_if 的基本用法存在问题

    我正在尝试制作一个简单的模板函数 它给出了一些参数 它输出它们之间有一个空格 其中一些可以是枚举的元素 在这种情况下我想输出它的整数值 这是我的代码 include
  • 为生产者消费者问题的变体选择数据结构

    现在 我有一个队列 有多个生产者和单个消费者 消费者线程操作缓慢 此外 消费者通过 peek 操作从队列中取出元素 并且在消费操作完成之前 无法从队列中删除该元素 这是因为生产者线程作为辅助操作还会拍摄当时未完全处理的所有元素的快照 现在
  • 如何禁用 XPage 的客户端验证?

    我知道我可以通过以下方式禁用 xsp properties 中的服务器或应用程序 xsp client validation false 在控制层面通过 disableClientSideValidation true 如果没有为每个控件设
  • 无法联系 pgAdmin 4 服务器:致命错误

    我将 PostgreSQL 从 13 3 升级到 13 4 并收到 pgAdmin 4 的致命错误 我发现其他类似的问题尝试解决删除文件夹的问题 C Users myusername AppData Roaming pgadmin sess
  • 用类实例替换数组中的元素

    这类似于this所以请先阅读它以了解我想要做什么 现在 我想在有类实例时进行替换 例如 import numpy as np class B def init self a b self a a self b b arr np array